异步/顺序承诺,检测结束

Async / Sequentials promises, detect the end

我有一组 promises ( Q ) 函数:

var tasks = [p, p, p, p, ...];

我希望能够异步或同步执行它们,并检测所有承诺何时已执行。我能够让它同步工作:

1) 同步

tasks.reduce(function(prev,cur){
    return prev.then(cur);
}, Q.resolve()).then(function() {
   console.log("finished")
});

2) 异步

var result = Q();
tasks.forEach(function (f) {
   return result.then(f);
});

但是,如何在异步工作时检测到所有承诺何时都已执行? 任何帮助将不胜感激。

示例取自Q doc

您不想使用 forEach,而是 map 从您的函数数组中获取一组承诺。有了它,您可以使用 Q.all 获得所有结果的承诺(当所有承诺都已解决时):

Q.all(tasks.map(function(f) {
   return f();
})).then(function() {
   console.log("finished")
});