Я выполняю несколько пакетных асинхронных операций в своем коде. Хотя операции внутри пакета должны выполняться асинхронно, пакеты должны выполняться синхронно один за другим.
Вот 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()
, но он остановил выполнение после первой цепочки. Я упускаю что-то очевидное?
Спасибо за любой совет.
Ваше здоровье