Я выполняю несколько групповых асинхронных операций в своем коде. Хотя операции внутри пакета должны выполняться асинхронно, партии должны выполняться синхронно один за другим.Цепочки обещаний не выполняются последовательно с использованием библиотеки Q-обещаний
jsfiddle Я создал. Посмотрите на консоль, так как все выходные есть. И вот код для удобства:
asyncChain(10, 'FIRST CHAIN')
.then(function() {
asyncChain(10, 'SECOND CHAIN');
})
.then(function(){
asyncChain(10, 'THIRD CHAIN');
});
function asyncChain(n, msg) {
var promiseChain = Q.fcall(function() {
10;
});
console.log('starting:' + msg);
for (var i = 0; i < n; i++) {
promiseChain = promiseChain.then(asyncOperation(i, msg));
}
console.log('returning' + msg);
return promiseChain;
}
function asyncOperation(i, msg) {
var d = Q.defer();
setTimeout(function() {
console.log('resolving for #' + i + msg);
d.resolve(i);
}, 300 + Math.random()*1000);
return d.promise;
}
В основном это 3 операции с обеими партиями, которые я ожидаю, чтобы закончить один за другим. Значение выходного сигнала для данного образца будет что-то вроде этого:
starting FIRST CHAIN
returning FIRST CHAIN
resolving 1..10 FIRST CHAIN
starting SECOND CHAIN
returning SECOND CHAIN
resolving 1..10 SECOND CHAIN
and so on
Я попытался с помощью all()
метод вместо then()
но он остановил выполнение после первой цепи. Мне что-то не хватает?
Спасибо за любой совет.
Приветствия
Внутри партий «асинхронный» вы все еще имеете в виду «последовательно», а не «параллельно»? – Bergi
Я имел в виду последний. –