async.waterfallとasync.seriesの違いは何ですか


回答:


168

async.waterfall各関数がその結果を次の関数にasync.series渡し、すべての結果を最後のコールバックに渡すことができるようです。より高いレベルでasync.waterfallは、データパイプライン(「2を指定すると、3を乗算し、2を加算し、17で除算する」)の場合async.series、順序どおりに実行する必要があるが、それ以外の場合は個別のタスクの場合です。


これらの2つの関数のいずれかが値を返すことは可能ですか?可能だと読みましたが、ドキュメントのどこにも関連情報が見つかりません。
アンダーソングリーン

1
@アンダーソングリーン:いいえ。ライブラリのソースを見ると、どちらwaterfallseries値を返しません。結果が何であれ、オプションのコールバックパラメータで使用されることが期待されます。
Twisol 2012

上記の答えは2012年までは正しいかもしれませんが、正しいものは次のものと同じです。つまり、series()は、ALLがFinalコールバックに渡される系列として結果として得られ、waterfallが最終的なコールバック。Mozilla Developer
Jeb50

53

どちらの関数も、すべての関数の戻り値を次の関数に渡します。エラーが発生した場合は、完了時にメインのコールバックを呼び出してエラーを渡します。

違いはasync.series()、シリーズが終了すると、すべての結果がメインのコールバックに渡されるということです。async.waterfall()最後に呼び出された関数の結果のみをメインのコールバックに渡します。


1
これが答えになるはずです;-)
スチュアートアレン

@マリオ「両方の関数が前の関数のコールバックを渡す」OR「両方の関数が前の関数の結果を渡す」?
user1451111 2017

@ user1451111、Result、lol ...初めて書いたと思いますが…

26

async.waterfall()を扱っていaction that relies on the previous outcomeます。

async.series() したいアクションを扱っています see all the result at the end


1
驚くほど作成された画像。自分で作成したのですか、それとも別の場所で入手しましたか?
user1451111 2017

あなたは答えに写真を入れるべきです、人々はおそらくそれらをo / w見逃すでしょう
Alexander Mills

1

私はasync.waterfallを有害だと考えています。一度書き込んだリファクタリングは難しく、さらに引数を指定すると他の関数によってシグネチャが大きく変更されるため、エラーが発生しやすくなるためです。

async.autoInjectasync.waterfallに代わる素晴らしい方法として、私は強くお勧めします。 https://caolan.github.io/async/autoInject.js.html

async.waterfallを使用する場合は、すべてを1つのオブジェクトに格納することをお勧めします。これにより、関数で長さやシグネチャを変更する必要がなくなります。

警告:これは悪いパターンです

async.waterfall([
  cb => {
    cb(null, "one", "two");
  },
  (one, two, cb) => {
    cb(null, 1, 2, 3, 4);
  },
  (one,two,three,four,cb) => {
     // ...
  }
])

上記のようにしないでください。これは使用するはるかに良いパターンです:

async.waterfall([
  cb => {
    cb(null, {one:"one", two:"two"});
  },
  (v, cb) => {
    cb(null, [1, 2, 3, 4]);
  },
  (v,cb) => {
     // ...
  }
])

そうすれば、関数の引数が適切な長さであることを確認しようとして、髪が抜けなくなります。最初の関数は、1つの引数-コールバックのみを受け入れます。残りのすべては、2つの引数-値とコールバックを受け入れる必要があります。パターンに固執すれば、正気のままです!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.