JS:与async.each相当的承诺是什么?

时间:2013-09-19 16:33:49

标签: javascript node.js asynchronous promise async.js

似乎今天宣布承诺将在ES6中。

我从来都不是一个承诺的人 - .then()的史诗链似乎比async.waterfall()中的一个简单的函数列表更复杂,但看起来我还是要学习它们。 / p>

那么与其他非常受欢迎的工作流程async.each()相同的是什么呢?

async.each(items, processItem, function(err){
    doSomething(err)
});

例如,对每个项目运行一个processItem函数,一旦完成,继续使用doSomething(如果任何processItem()被搞砸了,就做一些不同的事情。)

  • 我怎么能在承诺中这样做?
  • promises用户文档(不是the promises spec,实际的示例工作流程以及如何在promises中执行这些工作)是否存在官方位置,例如异步?

2 个答案:

答案 0 :(得分:5)

  

我如何在承诺中这样做?

假设processItem现在不接受回调但返回承诺你会写

all(items.map(processItem)).then(doSomething);

all是您的图书馆的all函数,其中包含一系列承诺,例如Q.all。如果你没有,这个简单的实现将会:

function all(promises) {
    return promises.reduce(function(m, p) {
        return m.then(function(res) {
            return r.then(function(r) { return res.concat([r]); });
        });
    }, fulfill([]));
}
  

是否存在promises用户文档的正式位置(不是promises规范,工作流以及如何在promises中执行它们),就像有异步一样?

不。每个Promise库都有自己的文档,网上有很多教程。 “官方”只是规格,我认为这些规格很短且易于理解,供用户阅读。

答案 1 :(得分:3)

  

是否存在promises用户文档的正式位置(不是promises规范,实际示例工作流以及如何在promises中执行它们),就像异步一样?

我们一直将a page of general promise resources放在Q维基上。在工作流程和构图方面,我相信"How to Compose Node.js Promises with Q"会是最有帮助的;尽管有标题,但它并不是特定的Node.js。