Запрос не возвращает значение

Похожая задача и похожая проблема ( https://community.terrasoft.ru/questions/zapros-ne-vozvrasaet-znacenie ). Используя запрос:

var vip = 0;
var recordId = item.get("Id");
var esqCase = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Case"
});
esqCase.addColumn("UsrVIPobr");
esqCase.getEntity(recordId, function(result) {
if (result.success) {
vip = result.entity.get("UsrVIPobr");
}
}, this);

Получаю корректный Id (по базе находится нужное обращение с нужным id и полем UsrVIPObr). В карточке обращения есть логическое поле UsrVIPobr (1 или 0), но почему-то переменная vip не меняется. Прошу помочь разобраться. Изображение удалено.

Нравится

6 комментариев
Лучший ответ

Быстров Сергей,

Добро пожаловать в мир async вычислений, коллбеков и промисов)

Вам надо весь код(который за скриншотом) перенести в коллбек-функцию getEntity. грубо говоря:

var vip=null;
esq.getEntity(id, function(p) {
     //тут vip будет не null
     var vip=...;
 
     if (vip) {....}
}, this);
//тут vip все ещё null, следующие строки кода отработают ДО результата функции getEntity
var a = ...;
....

 

То, что у вас скриншот обрывается на esq.getEntity - уже подозрительно :)

Вы используете переменную vip после выполнения getEntity?

Варфоломеев Данила,

Да, используется для сравнения с константой

Там же асинхронное выполнение. В getEntity добавляется функция, которая запустится где-то потом, а код пошёл выполняться дальше.

Быстров Сергей,

Добро пожаловать в мир async вычислений, коллбеков и промисов)

Вам надо весь код(который за скриншотом) перенести в коллбек-функцию getEntity. грубо говоря:

var vip=null;
esq.getEntity(id, function(p) {
     //тут vip будет не null
     var vip=...;
 
     if (vip) {....}
}, this);
//тут vip все ещё null, следующие строки кода отработают ДО результата функции getEntity
var a = ...;
....

 

А есть какие-то безболезненные способы заставить работать код в синхронном режиме?

Быстров Сергей,

нет. только упаковать всё в Terrasoft.chain (те же коллбеки, только в более удобоваримом виде)

Показать все комментарии