私の問題は、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を(値で)渡すにはどうすればよいですか?また
- HTTPリクエストを連鎖させて順番に実行する適切な方法は何ですか?また
- 私が行方不明になっている他の何か?
PS:1の場合。コールバックのパラメーターを調べるソリューションは必要ありませんが、変数について「上から」知るコールバックの一般的な方法が必要です。