4

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

我从来都不是一个承诺人——史诗般的 .then() 链似乎比 async.waterfall() 中的简单函数列表更复杂,但看起来我无论如何都必须学习它们。

那么其他非常流行的工作流程async.each()的等价物是什么?

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

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

  • 我如何在承诺中做到这一点?
  • 有没有一个官方的地方来存放 Promise 用户文档(不是Promise 规范、实际示例工作流以及你如何在 Promise 中执行它们),比如异步?
4

2 回答 2

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([]));
}

有没有像异步一样的 Promise 用户文档(不是 Promise 规范、工作流程以及如何在 Promise 中执行它们)的官方位置?

没有。每个 Promise 库都有自己的文档,网上也有很多教程。“官方”只是规格,我认为这些规格简短易懂,足以让用户阅读。

于 2013-09-19T16:37:29.707 回答
3

有没有一个官方的地方来存放 Promise 用户文档(不是 Promise 规范、实际示例工作流程以及你如何在 Promise 中执行它们),比如异步?

我们已经在 Q wiki 上整理了一个通用承诺资源页面。在工作流程和组合方面,我相信“如何用 Q 组合 Node.js Promises”会是最有帮助的;尽管有标题,但它并不是真正特定于 Node.js 的。

于 2013-10-07T07:17:36.160 回答