Чтобы превратить массив элементов в последовательно обработанный массив обещаний, вы можете использовать reduce
.
var Q = require('q');
var arr = [1, 2, 3, 4, 5, 6, 7, 8];
var lastPromise = arr.reduce(function(promise, item) {
return promise.then(function() {
return someFunc(item);
});
}, Q.resolve())
lastPromise.then(function() {
console.log('some message');
})
.catch(function(error) {
console.log('some error');
});
Здесь someFunc
обрабатывает ваша деталь сказать, как это
var item = 'item1';
someFunc(item).then(function(result) {
console.log("The task finished.");
})
.catch(function(error) {
console.log(error);
});
arr.reduce()
принимает два аргумента, обратных вызов и начальный value.If вы заметите, что они прошли второй аргумент reduce()
, теперь будет называть данный обратный вызов для каждого элемента в вашем массиве. Обратный вызов получает два аргумента. В первый раз первым аргументом является начальное значение, а второй аргумент - первый элемент массива. В следующий раз первым аргументом является возвращаемое значение предыдущего времени, когда был вызван обратный вызов, а второй аргумент - следующий элемент массива.
Для получения более подробной информации по этому вопросу, пожалуйста, посмотрите на https://joost.vunderink.net/blog/2014/12/15/processing-an-array-of-promises-sequentially-in-node-js