「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 に切り替えましたが、以下に概説するコードを変更しなくても正常に動作します。