web-dev-qa-db-ja.com

node.js非同期ライブラリ

コールバックシンドロームのレイヤーの修正に役立つ多数のライブラリがあります。

実際、多すぎますが、どれを使用しますか?

56
Mark

Async.js を使用します。

Asyncは、非同期JavaScriptを操作するための簡単で強力な機能を提供するユーティリティモジュールです。もともとはnode.jsで使用するために設計されましたが、ブラウザーで直接使用することもできます。

async.map(['file1','file2','file3'], fs.stat, function(err, results){
    // results is now an array of stats for each file
});

async.filter(['file1','file2','file3'], path.exists, function(results){
    // results now equals an array of the existing files
});

async.parallel([
    function(){ ... },
    function(){ ... }
], callback);

async.series([
    function(){ ... },
    function(){ ... }
]);
44
Baggz

あなたが好きなものを選んでください:P。 async などが好きです。しかし Step もかなり有名です。モジュールがたくさんあるのはとてもいいことだと思います。 node.jsコミュニティは、いくつかの非常に優れたモジュールを公開しています。 NPMを使用してそれらをインストールすることは、まったく労力を要しません。

6
Alfred

Qからの約束 を使用したい:

関数がブロックせずに値を返すことも例外をスローすることもできない場合は、代わりにpromiseを返すことができます。 promiseは、関数が最終的に提供する可能性がある戻り値またはスローされた例外を表すオブジェクトです。 promiseは、レイテンシを克服するためのリモートオブジェクトのプロキシとしても使用できます。

最初のパスでは、プロミスは「運命のピラミッド」を緩和することができます。これは、コードが前に進むよりも速く右に進む状況です。

step1(function (value1) {
    step2(value1, function(value2) {
        step3(value2, function(value3) {
            step4(value3, function(value4) {
                // Do something with value4
            });
        });
    });
});

Promiseライブラリを使用すると、ピラミッドをフラット化できます。

Q.fcall(step1)
.then(step2)
.then(step3)
.then(step4)
.then(function (value4) {
    // Do something with value4
}, function (error) {
    // Handle any error from step1 through step4
})
.done();

このアプローチを使用すると、try、catch、およびfinalと同様に、暗黙的なエラー伝搬も行われます。ステップ1のエラーはステップ5に流れ、そこでキャッチされて処理されます。

コールバックアプローチは、「制御の反転」と呼ばれます。戻り値の代わりにコールバックを受け入れる関数は、「私に電話しないで、私が電話します。」と言っています。入力引数を制御フロー引数から明確に分離して、反転を解除しないことを約束します。これにより、APIの使用と作成が簡単になり、特に可変引数、休憩、拡散引数が簡素化されます。

5
laktak

他の同期ライブラリでの問題は、最初にすべてのタスクを定義する必要があり、見つけたわかりやすい直感的なAPIが提供されていないことが多かったことです。いつでもどこでもグループにタスクをプッシュし、そのグループを並列または直列のいずれかの方法で実行したいだけです。

私は TaskGroup 内のフロー機能が大好きで、DocPadや BugHerd を含む多くの大きなプロジェクトに使用しました。 例はREADMEにあります。

0
balupton