1. 非同期プログラミングとは何ですか?
非同期プログラミングとは、非同期 I/O などの要因により、実行結果を同期的に取得できない場合を指します。
コールバック関数内で次の操作を行うコーディングスタイル、setTimeout関数やajaxリクエストなどの一般的なもの。
例:
for (var i = 1; i <= 3; i++) { setTimeout(function(){ console.log(i); }, 0); };
ここにいるほとんどの人は、出力は 123 または 333 だと思うでしょう。実際には 444
が出力されますここで非同期プログラミングについて話します。
高度な機能の定義
なぜここで高水準関数について説明するのでしょうか? 高水準関数は非同期プログラミングの基礎だからです。
では、高度な機能とは何でしょうか?
実際、高度な関数は関数をパラメーターまたは戻り値として受け取ります。
例:
function test(v){ return function(){ return v; } }
上記は戻り値として関数を使用する方法です。
2. プロセス制御
関数は次のとおりです:
シリーズ
滝
平行
平行限界
…
シリーズ関数のシリアル実行
その機能は、順番に実行することです。
async.series({ one: function(callback){ callback(null, 1); }, two: function(callback){ callback(null, 2); } },function(err, results) { console.log(results); });
出力: {1: 1、2: 2}
シリーズ関数の最初のパラメータは配列または JSON オブジェクトです。
さまざまなパラメーターのタイプは、返されるデータの形式に影響します。
ウォーターフォール関数 ウォーターフォールフロー
ウォーターフォール関数とシリーズ関数には多くの類似点があり、どちらも順番に実行されます。
違いは、ウォーターフォールでは各関数によって生成された値が次の関数に渡されるのに対し、シリーズにはこの関数が存在しないことです。例は次のとおりです。
async.waterfall([ function(callback){ callback(null, 'one', 'two'); }, function(arg1, arg2, callback){ // arg1 now equals 'one' and arg2 now equals 'two' callback(null, 'three'); }, function(arg1, callback){ // arg1 now equals 'three' callback(null, 'done'); } ], function (err, result) { // result now equals 'done' console.log(result); });
関数の途中でエラーが発生した場合、そのエラーは最終コールバックに直接渡され、結果は破棄され、後続の関数は実行されなくなります。
Parallel(タスク, [コールバック])
並列関数は、他の関数が先に実行されるのを待たずに、複数の関数を並列して実行します。
最終コールバックに渡される配列内のデータは、実行が完了する順序ではなく、タスクで宣言された順序になります。例は次のとおりです。
async.parallel([ function(callback){ callback(null, 'one'); }, function(callback){ callback(null, 'two'); } ], function(err, results){ });
ParallelLimit 関数は、Parallel に似ていますが、追加のパラメーター制限があります。
制限パラメーターは、無制限の同時実行ではなく、特定の同時タスク数にタスクを制限します。例は次のとおりです。
async.parallelLimit([ function(callback){ callback(null, 'one'); }, function(callback){ callback(null, 'two'); } ],
function(err, results){ console.log(results); });