需要正确调用答应降低(when.reduce)(Need correct call to Promi

2019-09-27 01:37发布

我有一个处理器功能,需要一个“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和维基例子没有给我任何的洞察力。

重要更新:下面的答案的工作,但抛出未处理拒绝错误。 罪魁祸首是当图书馆。 这似乎不再活跃,因为节点6.我切换到蓝鸟尚未更新,并没有任何改变,以下面列出的代码工作正常。

Answer 1:

我真不知道你在找什么,但它可能是

reduce(cmds, function(responses, cmd) {
    return processor(cmd).then(function(response) {
        responses.push(response); // or whatever
        return responses;
    });
}, []).then(function(responses) {
    …
});

想了解之前when.reduce ,你可能想看看非承诺阵列reduce



文章来源: Need correct call to Promise reduce (when.reduce )