【发布时间】:2017-03-08 02:28:01
【问题描述】:
我有一个处理器函数,它接受一个“cmd”对象并返回一个承诺,其中分辨率与传入的“cmd”对象相同(添加了一个响应键)。 reduce这里是when.reduce
reduce = require('when').reduce;
//return processor(cmds[0])
return reduce(cmds, function(processor, cmd) {
Debug.L1('running processor for component ', cmd.component)
return processor(cmd)
})
.then(cmds => {
Debug.L1('cmds with responses\n', cmds)
let response = cmds.map(cmd => {
return cmd.response
})
console.log('the complete response is\n', response)
});
这什么也没做,它确实到达了.then,但承诺数组永远不会触发,永远不会看到调试running processor...
如果我只运行一个处理器,它可以很好地运行 cmd[0]、cmds[1] 等。
return processor(cmds[0])
//return reduce(cmds, function(processor,cmd) {
// Debug.L1('running processor for component ', cmd.component)
// return processor(cmd) })
我在这里缺少什么?他们的 api 和 wiki 示例没有给我任何见解。
重要更新: 下面的答案确实有效,但会引发未处理的拒绝错误。罪魁祸首是when库。它似乎不再处于活动状态,并且自节点 6 以来一直没有更新。我切换到 bluebird,它工作正常,无需对下面概述的代码进行任何更改。
【问题讨论】:
-
似乎有些不对劲,您是否使用
processor(cmd)应该返回下一个processor?因为这就是reduce()通常的工作方式 -
处理器不会解析传递的对象。我正在寻找一系列承诺,这些承诺允许我传入同一个对象,但 on 键具有不同的值。我确实有一个解决方案,但正在寻找更优雅的东西,但也许 when.reduce 不是。看看我的帖子把我带到了这里。 stackoverflow.com/questions/40206604/…