私の問題は、node.jsでの非同期プログラミングの理解の欠如に基づいていると確信していますが、ここにはあります。Node.JS:変数を非同期コールバックに渡す方法は?
例:クロールしたいリンクのリストがあります。それぞれの非同期リクエストが返ってくるとき、私はそれがどのURLであるか知りたい。しかし、おそらく競合状態のために、各要求は、リスト内の最後の値に設定されたURLを返します。
var links = ['http://google.com', 'http://yahoo.com'];
for (link in links) {
var url = links[link];
require('request')(url, function() {
console.log(url);
});
}
予想される出力:
http://google.com
http://yahoo.com
実際の出力:
http://yahoo.com
http://yahoo.com
だから私の質問はどちらかである:
- はどのように(値で)URLを渡しますコールバック機能? OR
- HTTPリクエストを連鎖して順次実行する適切な方法は何ですか? OR
- 他に何か不足していますか?
PS:私はコールバックのパラメータを調べるソリューションは望んでいませんが、コールバックの一般的な方法は「上からの変数」を知っています。
これは範囲についてのものではありません。それは閉鎖についてです。他の多くの言語にはブロックスコープはありませんが、クロージャがないためにこの問題に直面しません。 – slebetman
JavaScriptがブロックスコープをサポートしていれば、OPコードのコールバック関数の 'url'へのクロージャーアクセスは、ループの各反復が(C#のように)独自の' url'変数を取得するので機能します。 – JohnnyHK
要求は簡潔にするためにそこにあります。私のコードでは、すべてが最初に必要です。 – Marc