2017-04-04 9 views
-2

私は、それぞれが存在するかどうかを確認し、すべてが完了した後に継続するURLのリストをチェックしたい:私は、各タスクが完了した後に続けることは何もないときasync.each - 何のためのコールバックですか?

var urls = [ "http://...", "http://...", ... ]; 

async.each(urls, function(url, ??callback??) { 
      http.get(url, function(response) { 
       console.log(response.statusCode); 
      }); 
      }, function(err) { 
       if (!err) 
        console.log("All urls called"); 
      }); 

私は??callback??のために何を入れますか? documentationは、オプションではありません。

+0

明確にするには、iterateeが受け取るコールバックについて話していますよね?最終的な全体コールバックではなく、実際にはオプションです。 –

+0

はい、私のコードに示されている通り、 'iteratee'のものです。私は投票されたのだろうか。 –

+0

私は分かりません。 :-)合理的な質問と思われます。物事の多くは必ずしも文書からすぐにはっきりとは分かりません。 –

答えて

2

second parameterAsyncFunctionある、iterateeある:

非同期の文脈においてAsyncFunction()

アン「非同期機能」とは、パラメータの可変数とは非同期関数であります最後のパラメータはコールバックです。 (function (arg1, arg2, ..., callback) {})最終コールバックの形式はcallback(err, results...)です。この関数は、関数が完了すると呼び出される必要があります。エラーが発生したことを通知する最初の引数としてErrorをコールバックする必要があります。それ以外の場合は、エラーが発生しなかった場合は、最初の引数としてnullを指定して呼び出す必要があります。コールバックは、理想的にはJavaScriptイベントループの後のティックで、一度だけ呼び出される必要があります。

asyncは、iterateeと呼んでいます。あなたのケースでは、あなたはgetが完了した(成功したか失敗した)ときにそれを呼び出す必要があります:それは、全体のプロセスを管理できるように

var urls = [ "http://...", "http://...", ... ]; 
async.each(urls, function(url, callback) { 
    http.get(url, function(response) { 
     console.log(response.statusCode); 
     callback(null); // <==== 
    }); 
}, function(err) { 
    if (!err) 
     console.log("All urls called"); 
}); 

asyncニーズは、操作が完了した知っています。

私は上記の例を単純化しているが、成功と失敗を区別する必要があるかもしれないが、エラー(最初の引数)または成功(最初の引数= null、オプションの2番目引数)。

+1

私は、 'callback'がasyncによって提供されるように見ています。ありがとう。 –

+0

@OldGeezer:そうですね。 :-) –

0

あなたは、それぞれの非同期タスクを完了したとき、つまりURLを取得したときにcallbackに電話をかけることを意味します。だから、何かのような

...

http.get(url, function(response) { 
    // Here you call it with `null` to signify a non-error completion. 
    callback(null); 
}); 

...あなたのメイン関数の内部。あなたがしたかったのは、それ以上のコードなしで呼び出すことだったなら、http.get(url, callback.bind(null, null))を使うことができました。

+1

Downvoter:ここでは何が役に立たないのですか? –

関連する問題