node.js_node.js での async 非同期プログラミングについての簡単な説明

WBOY
リリース: 2016-05-16 15:35:46
オリジナル
1081 人が閲覧しました

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){

});

ログイン後にコピー
tasks パラメータには、series 関数と同じように配列または json オブジェクトを指定できます。
タスクパラメータのタイプが異なると、返される結果の形式も異なります。


ParallelLimit(タスク, リミット, [コールバック])

ParallelLimit 関数は、Parallel に似ていますが、追加のパラメーター制限があります。

制限パラメーターは、無制限の同時実行ではなく、特定の同時タスク数にタスクを制限します。例は次のとおりです。


2、
async.parallelLimit([
  function(callback){
    callback(null, 'one');
  },
  function(callback){
    callback(null, 'two');
  }
],
ログイン後にコピー


function(err, results){
  console.log(results);
});
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート