1

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

4

1 に答える 1

1

あなたが探しているものはまだわかりませんが、そうかもしれません

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

理解しようとする前にwhen.reduce、promise 以外の配列reduceを確認することをお勧めします。

于 2016-10-25T22:12:31.960 に答える