Нужна помощь: последовательно вызываю несколько функций:
Terrasoft.chain(
function(next) {
this.onEntityInitializedRTC();
next();
},
function(next) {
this.onEntityInitializedRole();
next();
},
function(next) {
this.onEntityInitializedEDIT();
next();
},
function(next) {
window.console.info("Finish find a right");
next();
},
this);
Функции
this.onEntityInitializedRTC()
this.onEntityInitializedRole();
this.onEntityInitializedEDIT();
ранее предопределены, но выполняется только первая onEntityInitializedRTC().
Что следует исправить, чтобы заработала вся цепочка?
Нравится
Ну смотрите. Вот такая функция:
выдаёт в консоли "0 , 1 , 2 , 3". Так что сам чейн у вас написан правильно. надо конкретно разбираться в функциях и где что не работает/вылетает
Добрый день, Наталья!
Действительно, проверили Ваш вызов функций работает, функции вызываются корректно последовательно. В данном случае, вероятно проблема уже либо в какой-то конкретной функции, либо какая-то из них просто ничего не делает/вы не видите результата ее выполнения. В любом случае нужно копать глубже и видеть весь код.
Спасибо за совет. В функциях у меня выполняются запросы к базе и нет уверенности, что вторая функция получает на вход результат выполнения первого запроса. Отладочный вывод на экран показывает, что 2-я функция начинает работать до того, как 1-я заканчивает работу.
А мне нужно последовательное выполнение запросов
Стригина Наталья пишет:
В функциях у меня выполняются запросы к базе
так и думал. используйте примерно такую конструкцию:
chainedFunction: function() { Terrasoft.chain( function(next) { this.onEntityInitializedRTC(next); }, function(next) { this.onEntityInitializedRole(next); }, function(next) { this.onEntityInitializedEDIT(next); }, function(next) { window.console.info("Finish find a right"); next(); }, this); } onEntityInitializedRTC: function(callback) { var esq = .... //создание esq esq.getEntityCollection(function(response) { //обработка ответа от сервера if (callback) { //смысл в том, чтобы "завернуть" вызов следующей функции onEntityInitializedRole в next, //кинуть в текущую функцию как callback, и ПОСЛЕ асинхронных операций вызвать след. функцию в цепочке callback.call(this); } }, this); }