【发布时间】:2015-05-11 05:31:24
【问题描述】:
我有一个列表值
xs = [1, 2, 3, 4]
我还有一个异步函数square,它返回传递给它的参数平方的承诺。我想将 my to list 的元素并行传递给我的函数,然后将 Promise 收集到一个数组中并等待它们全部完成。我可以将其表述为 map/reduce 操作。
Promise
.map(xs, function(x) {
return square(x)
}
)
.reduce(function(ys, y) {
return ys.concat(y)
}, [])
这最终会返回解析的值
[1, 4, 9, 16]
很简单。现在说我想像这样在答案数组中包含原始参数。
[{x:1, y:1}, {x:2, y:4}, {x:3, y:9}, {x:4, y:16}]
现在棘手的部分是我有一个对象列表,每个对象在 reduce 步骤的开头都有一个隐藏在其 y 属性中的承诺。如何编写 Bluebird 代码来执行此 reduce 步骤?
【问题讨论】:
-
这是相切的,但在您的原始代码中,您实际上并不需要这样做
.map(xs, function(x) { return square(x); })。square是一个函数,你可以直接传入:.map(xs, square)。
标签: javascript promise bluebird