Вопрос

Вызов цепочки функций

Нужна помощь: последовательно вызываю несколько функций:

                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().
Что следует исправить, чтобы заработала вся цепочка?

У меня такой же вопрос

4 комментария

Ну смотрите. Вот такая функция:

выдаёт в консоли "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);
}

 

Войдите или зарегистрируйтесь, чтобы комментировать