1

人気のある node.js モジュールasyncには、コレクションと制御フローの関数が含まれており、並列または直列で動作できるバージョンもあります。

しかし、その中には、直列に動作するループを構築する方法が見つかりません。

私はこの疑似コードと同じことをしようとしています:

forever {
    l = getline();

    if (l === undefined) {
        break;
    } else {
        doStuff(l);
    }
}
  • getLine()すべての呼び出しを並行して呼び出したい場合は、 を使用できますasync.whilst
  • fororwhileループのようなものを作成するのではなく、配列を反復処理したい場合は、 を使用できますasync.eachSeries

seriesコレクションの繰り返しではなく、制御フローで動作を取得するには何を使用できますか?

4

2 に答える 2

1

async.whilst 必要に応じてその機能をシリアルに実行するため、次のようなことができます。

var l = getline();
async.whilst(
    function () { return l !== undefined; },
    function (callback) {
        doStuff(l);
        l = getline();
        callback(); // Check function isn't called again until callback is called
    },
    function (err) {
        // All done
    }
);
于 2013-02-17T01:35:00.687 に答える
0

同期コードのように連続してループを実行したい場合は、async.series または async.waterfall を使用する必要があります。

series(タスク, [コールバック])

関数の配列を連続して実行します。前の関数が完了すると、それぞれが実行されます。シリーズのいずれかの関数がそのコールバックにエラーを渡すと、それ以上の関数は実行されず、シリーズのコールバックがエラーの値ですぐに呼び出されます。タスクが完了すると、結果が最終的なコールバックに配列として渡されます。

滝(タスク、[コールバック])

関数の配列を順番に実行し、それぞれの結果を配列内の次の関数に渡します。ただし、いずれかの関数がエラーをコールバックに渡すと、次の関数は実行されず、メインのコールバックがすぐに呼び出されてエラーが発生します。

ウォーターフォール チェーンはコールバックを連鎖させて、1 つの出力を次の入力として渡します。シリーズは単に直列に実行されます。

于 2013-02-17T08:31:15.940 に答える