2017-12-02 5 views
0

非同期パッケージのドキュメントでは、each()メソッドは3つの引数each(coll, iteratee, callback)を受け取ります。私の質問は第3引数callbackではなく、第2引数iterateeの別の "コールバック"関数です。Node.jsのAsyncパッケージの.each()メソッドのコールバック関数

iterateeは、関数を引数にとり、AsyncFunction()関数のタイプです。ここでは、このドキュメントで提供されている例を示します。この例では

// assuming openFiles is an array of file names 
async.each(openFiles, function(file, callback) { 

    // Perform operation on file here. 
    console.log('Processing file ' + file); 

    if(file.length > 32) { 
    console.log('This file name is too long'); 
    callback('File name too long'); 
    } else { 
    // Do work to process file here 
    console.log('File processed'); 
    callback(); 
    } 
}, function(err) { 
    // if any of the file processing produced an error, err would equal that error 
    if(err) { 
    // One of the iterations produced an error. 
    // All processing will now stop. 
    console.log('A file failed to process'); 
    } else { 
    console.log('All files have been processed successfully'); 
    } 
}); 

、第二引数function(file, callback)iteratee関数であるべきです。しかし、私はどこで、そのcallback引数が定義されているのか分かりません。上記の例ではcallback('File name too long');callback('File name too long');と呼ばれていますが、正確にはこの機能は何ですか?直感的に、このファンクションは、fileがこの事実を通知する処理を完了したときに呼び出されることがあります。しかし、私はこのcallbackの正確なコードをどこで見つけることができましたか?

+0

「each」の実装の中にあるコードは、その関数をiterateeに渡します。しかし、それを探しに行かないでください - それはかなり複雑なコードです。はい、 'callback'はiterateeが終了したときに結果やエラーが発生したときに呼び出され、' async.each'が何をしても次のステップを起動します。 – Bergi

+0

実際には何も起きていないので、その例は恐ろしいです。 – Bergi

答えて

0

私はあなたがiteratorCallback機能を介してhereと定義されたコールバックを見つけることができると信じています。

+0

それは3番目の引数 'callback'(それのラップ関数のようなもの)と関係があるようです。私は 'onlyOnce()'関数に没頭しませんでしたが、 'iteratee'の実行中に何らかのエラーが発生した場合、' call'が 'error'引数で呼び出されると仮定するのが妥当です。さもなければ、すべてのプロセスがジョブを完了したとき、 'callback'関数は' null'引数で最終的に呼び出されますか? – jaedong

+0

あります。あなたが投稿した例では、 'iteratee'によって呼び出される' callback'は、async.eachに与えられた最後の引数を参照します。 'function(err)' – rgon

関連する問題