我相信我的问题基于对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,我不想要一个检查回调参数的解决方案,而是一种回调了解“上面的”变量的一般方法。
url
将能够正常工作,因为循环的每次迭代都会获得自己的url
变量(类似于C#)。请注意,这里的重点是保持原意并使翻译更加通俗易懂,不提供解释或其他非翻译内容。 - JohnnyHK