我确定我的问题是基于对 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. 我不想要一个检查回调参数的解决方案,而是一种通用的回调方法,它知道“从上面”的变量。