我有一個處理函數,它接受一個「cmd」對象,並返回一個承諾,其中的解析與傳入的cmd對象相同(添加了響應鍵)。 reduce
這裏是when.reduce需要對Promise的正確調用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的例子沒有給我任何見解。
重要更新: 答案下面的工作,但拋出未處理的拒絕錯誤。罪魁禍首是何時圖書館。它似乎不再活躍,並且自從節點6以來沒有更新過。我切換到藍鳥並且它工作正常,沒有改變下面列出的代碼。
有些東西看起來不正確,你用'processor(cmd)'是否應該返回下一個'processor'?因爲'reduce()'通常是這樣工作的 –
處理器不會這樣做,它會解析傳遞的對象。我正在尋找一系列的承諾,允許我傳入同一個對象,但使用具有不同值的鍵。我確實有一個解決方案,但正在尋找更優雅的東西,但可能when.reduce不是。看到我的帖子,把我帶到這裏。 http://stackoverflow.com/questions/40206604/a-better-way-to-fire-off-a-sequence-of-the-same-promise-that-have-gets-different – DKebler