我试图了解如何在这里调用http.get。因此,这是我正在尝试的示例代码:
var http = require('http');
var urls = ['http://www.google.com',
'http://www.yahoo.com',
'http://www.cnn.com']
for (i = 0; i < 3; i++ ){
url = urls[i]
console.log(url)
console.log('------')
http.get(url, function(resp){
console.log(url)
});
};
上面的代码给了我这个输出:
http://www.google.com
------
http://www.yahoo.com
------
http://www.cnn.com
------
http://www.cnn.com
http://www.cnn.com
http://www.cnn.com
我得到了前三个(在'------'之前的那个)。我不明白的是,为什么最后三行都给我cnn.com?我以为http.get请求在每次迭代时都会启动?
这是否意味着当“ for”到达循环末尾时,http.get中的console.log(url)引用了http.get外的url = urls [2]?我该如何打印传递给http.get的网址(又称为参数)?
这与节点无关。这是一个JavaScript关闭问题。url
在循环的每次迭代中都会更新该变量,以便在执行任何回调函数(创建三个回调函数)时,将url
变量设置为"http://www.cnn.com"
。
尝试一下,这是一种获取所需输出的简单方法:
var http = require('http');
var urls = ['http://www.google.com',
'http://www.yahoo.com',
'http://www.cnn.com']
for (i = 0; i < 3; i++ ){
(function() {
var url = urls[i]
console.log(url)
console.log('------')
http.get(url, function(resp){
console.log(url)
});
})();
};
基本上,它只是添加一个闭包,这样您就不必在每次迭代时都修改相同的变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句