Nodejs非同期プロセスの枠組みasyncの方法


Asyncの簡単な紹介:
Aryncはプロセス制御ツールパッケージであり、直接的で強力な非同期機能を提供しています。Javascriptに基づいてNode.jsのデザインをしています。また、ブラウザで直接使用することもできます。Asyncは、一般的なmap、reduce、filter、forEachなどの約20の関数を提供しており、非同期フロー制御モードにはシリアル、パラレル、滝などが含まれています。
https://github.com/caolan/async
私たちがよく使うのは以下の4つです。
  • シリアル無関連
  • シリアルは
  • に関連しています。
  • 並列関連なし
  • インテリジェント制御
  • 1.async.series:シリアルには関連がない:
    いくつかの関数や方法は順次実行しますが、彼らの間には連絡がなく、ファイルを書きたいです。書き終わったら、ユーザーのようにメールを送ります。この両者の間には必然的な連絡はありませんが、ファイルを作成してからメールを送る必要があります。
    asyncにはこの流れを実現する方法があります。コードは下記の通り実現されます。
    
    var async = require('async');
    console.time('series');
    async.series({
      one: function(callback) {
        callback(null, 'one');//callback('i am err','one');    
      },
      two: function(callback) {
        callback(null, 'two');
    
      },
    }, function(error, result) {
      //    
      console.log('error: ' + error);
      console.log('result: ' + result);
      console.timeEnd('series');
    });
    
    // error: null
    // result: [object Object]
    // series: 4.472ms
    
    
    2.async.waterfall:シリアルは関連があります。
    滝の流れ関数は、列の各関数をシリアルで実行して、最後にチューニングを行います。文法:async.waterfall(tasks、calback)の最初のパラメータtaskysは配列であり、配列は順次実行する必要がある関数を含んでいます。
    第二のパラメータは反転関数で、滝の流れ関数(つまり、taskys配列の関数)がエラーが発生したときにこのコールバック関数を実行し、エラー情報を返します。滝の流れ関数が間違っていない場合は、taskys配列に含まれる関数を実行した後にこのコールバック関数を実行します。
    使い方例:一般的な使い方:
    
    async.waterfall([
      myFirstFun,
      mySecondFun,
      myLastFun
    ],function(err,result) { // result    
      // result    tasks         (myLastFun)    done
      console.log(result);  // myLastFun
    })
    function myFirstFun(callback) {
      callback(null,'one','two');
    }
    function mySecondFun(arg1,arg2,callback) {
      // arg1     'one' ,arg2     'two'
      callback(null,'three');
    }
    function myLastFun(arg1,callback) {
      // arg1     'three'
      callback(null,'done');
    }
    
    3.async.parallel:並列無関係
    taskは、前の関数が完了するまで、関数セットを並列に実行します。どの関数でもエラーが発生したら、すぐにコールバック関数を実行し、エラー情報を返します。エラーが発生していない場合は、すべてのtaskys関数を実行した後、戻り関数で結果を返します。
    文法:async.parallelコード例:
    
    async.parallel([
      function(callback) {
        setTimeout(function() {
          callback(null, 'one');
        }, 200);
      },
      function(callback) {
        setTimeout(function() {
          callback(null, 'two');
        }, 100);
      }
    ],function(err, results) {
      console.log(result)}
    );
    
    4.async.aut:インテリジェントコントロール
    以上は純粋なシリアル伝送で並行していますが、一つのシーンでシリアルを使ってもパラレルを使う必要がある場合、それぞれの書き込みで解決できますが、効率はあまり高くなく、メンテナンス性もあまり良くないので、autはこの問題を解決できます。
    次のような場面:
  • どこからデータを取得しましたか?
  • は、ハードディスク上に新しいディレクトリを作成する
  • データをディレクトリの下にあるファイル
  • に書き込みます。
  • メールを送り、ファイルを別添の形で他の人に送ります。
  • は1と2が並行して実行できることを知ることができます。3は1と2が完成するまで待つ必要があります。4は3が完成するまで待つべきです。
  • は、autを使用して
  • を解決する。
    
    var async = require('async');
    console.time('auto');
    async.auto({
      getData: function(callback) {
        setTimeout(function() {
          console.log('1.1: got data');
          callback(null, 'mydata');
        }, 300);
      },
      makeFolder: function(callback) {
        setTimeout(function() {
          console.log('1.1: made folder');
          callback(null, 'myfolder');
        }, 200);
      },
      writeFile: ['getData', 'makeFolder', function(callback) {
        setTimeout(function() {
          console.log('1.1: wrote file');
          callback(null, 'myfile');
        }, 300);
      }],
      emailFiles: ['writeFile', function(callback, results) {
        console.log('emailed file: ', results.writeFile);
        callback(null, results.writeFile);
      }]
    }, function(err, results) {
      console.log('err: ', err);
      console.log('results: ', results);
      console.timeEnd('auto');
    });
    
    
    結果は以下のとおりです
    1.1:made folder
    1.1:got data
    1.1:wrote file
    email d file:  myfile
    err:  null
    レスリング:  { makeFolder:'myfolder'は、
      get Data:'mydata'
      writeFile:'myfile'は、
      email Files:'myfile'
    )
    atot:650.97 ms
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。