2016-05-03 9 views
2

私はdocsで、この例を見つけました。メインコールバック(function(err、results)...)がどのように機能するのか理解していますが、1つまたは2つの関数に渡される 'callback'パラメータは何ですか?彼らはどこから来て、彼らは何をしていますか?どのようasync.parallel作業中のコールバックは、(それはどこから来るのでしょうか?)ん

async.parallel({ 
    one: function(callback){ 
     setTimeout(function(){ 
      callback(null, 1); 
     }, 200); 
    }, 
    two: function(callback){ 
     setTimeout(function(){ 
      callback(null, 2); 
     }, 100); 
    } 
}, 
function(err, results) { 
    // results is now equals to: {one: 1, two: 2} 
}); 

答えて

1

どこから来たものではなく、ライブラリの仕組み、コールバックを使ってデータを次の関数に渡します。

これは、ここでの関数です:

function _parallel(eachfn, tasks, callback) { 
    callback = callback || noop; 
    var results = isArrayLike(tasks) ? [] : {}; 

    eachfn(tasks, function (task, key, callback) { 
     task(rest(function (err, args) { 
      if (args.length <= 1) { 
       args = args[0]; 
      } 
      results[key] = args; 
      callback(err); 
     })); 
    }, function (err) { 
     callback(err, results); 
    }); 
} 

https://github.com/caolan/async/blob/master/dist/async.js#L3471

+0

まあ、それはどこから来るん。これは、非同期ライブラリの内部から来ます。 – jfriend00

3

callback引数が非同期インフラストラクチャによって、あなたの関数に渡されます。これは、非同期の内部の関数を指しています(これはあなたが知る必要はありません)。非同期インフラストラクチャはそれをあなたに渡し、適切な時間に呼び出すように求めます。

これは、あなたの非同期機能は、それが成功したか、エラーで終了したかどうか、また、その作業を終了したことを知らせるために非同期ライブラリに戻って通信する方法です。あなたの関数は、それが仕事だ完了したら、あなたはその関数を呼び出すと、それはプロセスのこのステップは、現在(エラーまたは成功のいずれかで)行われる非同期ライブラリに通知します。


あなたはNode.jsのエクスプレスミドルウェアに精通している場合はFYI、それはミドルウェアに渡される引数nextと非常に似ています。ミドルウェアが呼び出されると、それに渡される引数の1つがnextコールバックです。あなたのミドルウェアは、(非同期かもしれない)その作業を行い、それが行わだときに、それがそれに渡されたnext()コールバックを呼び出すことによって行うのExpressのインフラを伝えます。ここで

は、Expressから多少同様の例です:

app.use(function (req, res, next) { 
    doSomethingAsync(function() { 
     next(); 
    }) 
}); 
+0

okコールバックは、メインコールバックに作業が完了したことを示します。そのコールバック引数を渡すポイントは何ですか? ?ヌル(のような、および1ヌルのポイントは何であると1つのだけの成功応答である – akantoword

+1

@jlei - ??。コールバックへの最初の引数がエラーかがあったかどうか非同期(async)告げるあなたはノー示すために 'null'なのでを渡しますあなたはその最初の引数のいずれかのtruthy値(通常はエラーオブジェクト)を渡すとエラー。、そして、それはエラー状態を意味し、非同期ライブラリはその残りの処理を中止し、完了コールバックに至るまでそのエラーを渡します。これが一般的ですノード内の非同期呼び出し規約。 – jfriend00

関連する問題