似乎今天宣布承诺将在ES6中。
我从来都不是一个承诺的人 - .then()的史诗链似乎比async.waterfall()中的一个简单的函数列表更复杂,但看起来我还是要学习它们。 / p>
那么与其他非常受欢迎的工作流程async.each()相同的是什么呢?
async.each(items, processItem, function(err){
doSomething(err)
});
例如,对每个项目运行一个processItem函数,一旦完成,继续使用doSomething(如果任何processItem()被搞砸了,就做一些不同的事情。)
答案 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。