Публикация

Схема GetEntity работает асинхронно. Можно ли сделать так, чтобы GetEntity работала синхронно?

Вопрос

Метод getEntity класса EntitySchemaQuery работает асинхронно. Можно ли сделать так, чтобы метод getEntity работал синхронно?

Ответ

Метод getEntity клиентской EntitySchemaQuery рассчитан только на асинхронное использование. Тем не менее, можно имитировать синхронное поведение с помощью Terrasoft.chain.

Выглядит это так:

getMyEntity: function(callback) {
    var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
        rootSchemaName: schemaName
    });
    ...
    esq.getEntity(recordId, function(response) {
        ...
        if (callback) {
            callback.call(this);
        }
    }, this)
},
globalMethod: function() {
    Terrasoft.chain(
        function(next) {
            this.getMyEntity(function() {
                next();
            });
        },
        function() {
            this.doAfterGettingEntity();
        },
        this
    );
}

В последнем методе параметр next хранит ссылку на следующий метод в цепочке. Исходя из реализации, он будет вызван не раньше, чем клиент получит ответ от сервера.

Terrasoft.chain может содержать сколько угодно аргументов. Важно не забывать указывать в аргументах next, чтобы цепочка не прервалась раньше времени. Последним аргументом передается контекст выполнения.

Нравится

Поделиться

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