我确定我的问题是基于对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(按价值计算)的回拨功能?或
- 链接HTTP请求的正确方式是什么,以便它们按顺序运行?或
- 我失踪的东西?
PS:对于1.我不想要一个解决方案来检查回调的参数,但是知道变量'从上面'的回调的一般方法。
这不是范围。这是关闭。很多其他语言没有封锁范围,但由于缺乏封锁而没有面对这个问题。 – slebetman
问题是,如果JavaScript确实支持块范围,那么在OP代码的回调函数中对'url'的闭包访问就可以工作,因为循环的每次迭代都会得到自己的url变量(就像在C#中一样)。 – JohnnyHK
为了简洁起见,需求就在那里,在我的代码中,所有需求都是在开始阶段。 – Marc