我需要在循环中执行一个异步函数(使用不同的参数(。任何想法如何在 Node.js 中使用 Q 模块来完成。下面是一个例子:-
function addAsync(a, b) {
var deferred = q.defer();
// Wait 2 seconds and then add a + b
setTimeout(function() {
deferred.resolve(a + b);
}, 2000);
return deferred.promise;
}
Q.all 可以使用 ((,但这都是并行运行的。由于项目要求,我基本上需要按顺序执行它们。
如果你不必坚持使用 Q.js我建议你看看 async。
异步是一种流行的异步流控制库,它提供了大量有用的功能,包括系列或瀑布等功能,这些函数完全符合您的需求。谢谢:)
你有很多选择,但这应该让你行动起来:
parameters.reduce(function (results, parameters) {
return results.then(function () {
return addAsync(parameters[0], parameters[1])
.then(function (result) {
results.push(result);
return results;
})
});
}, Q([]))
.then(function (results) {
// ...
})
.done()
我在Q-IO中有一个更令人愉快的解决方案 https://github.com/kriskowal/q-io/pull/57
Reader(parameters)
.map(function (parameters) {
return addAsync(parameters[0], parameters[1])
}, null, 1)
.all()
.then(function (results) {
// ...
})
其中1
是并行限制器。