节点 Q - 用 Q 处理数组

Node Q - handle array with Q

我有一个元素数组 var arr = [1, 2, 3, 4, 5, 6, 7, 8]。我想要的是获取每个元素,做一些事情,然后再接受另一个。我不希望这些事情并行完成。

例如:

arr.forEach(function(d){
   //send 'd' through HTTP
   //if send is success wait 1000 resend the same.      
});

如何使用 Q 执行此操作?

要将项目数组转换为按顺序处理的承诺数组,您可以使用 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(),它现在将为你的每个元素调用给定的回调大批。回调有两个参数。第一次,第一个参数是初始值,第二个参数是数组的第一个元素。下一次,第一个参数是上次调用回调的return值,第二个参数是数组的下一个元素。

有关此的更多详细信息,请查看 https://joost.vunderink.net/blog/2014/12/15/processing-an-array-of-promises-sequentially-in-node-js