2

我需要在循环内执行一个异步函数(使用不同的参数)。任何想法如何使用 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 可以使用(),但它是并行运行的。由于项目要求,我基本上需要按顺序执行它们。

4

2 回答 2

4

如果您不必坚持使用 Q.js,我建议您查看async

Async是一个流行的异步流控制库,它提供了大量有用的功能,包括完全符合您需要的系列瀑布等功能。谢谢 :)

于 2013-10-09T17:53:50.643 回答
1

你有很多选择,但这应该会让你感动:

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并行限制器在哪里。

于 2013-10-10T00:20:40.903 回答