【发布时间】:2015-07-08 23:11:06
【问题描述】:
我在使用 bluebird Promises 时遇到了问题。我正在使用 CoffeeScript,但也欢迎 JavaScript 答案:)
这是我想要做的:
代码示例
Promise = require 'bluebird'
Model = Promise.promisifyAll(require '[...]') # mongoose model promisified
getOpts = () -> [...] # whatever
Promise.each [1..3], (number) ->
opts = getOpts(number)
return Model.count(opts).exec (err, count) ->
return "the count is #{count}"
.spread () ->
console.log JSON.stringify arguments
result = arguments.join(',')
[...]
说明
我想用1、2、3(依次)运行相同的函数,所以我使用了bluebird的.each函数。
在函数中,我需要从我的数据库中获取计数。我正在使用 mongoose 和 bluebird 的 promisifyAll 函数来返回一个 Promise 并确保 .each 等到每个查询完成后再进行下一步。
然后,我想收集每个查询的结果。我正在使用蓝鸟的spread 来收集.each 的返回值。但是,它不包含嵌套承诺的返回值。 arguments 值为:
{
"0": 1,
"1": 2,
"2": 3
}
有什么想法吗?
谢谢
编辑
看起来蓝鸟的.each 与.spread 不匹配。我正在调查这个问题。
编辑 2
(感谢伯吉)
我找到了一个解决方案:首先我构建了一个函数数组。然后我在这个数组上调用bluebird的.all,然后调用.spread。
编辑 3
好的,我终于尝试了.map 而不是.each,它也很好用。
【问题讨论】:
标签: javascript coffeescript mongoose promise bluebird