我需要为程序提供3个URL,而不是按给定URL的顺序打印出服务器响应。 我需要一种方法来查看响应来自哪个URL,但我在文档中找不到任何解决方案。那里有“response.getURL”之类的东西吗? 提前谢谢。
var strings = [];
var ended = 0;
for(int i=0; i<urls.length; i++){
http.get(urls[i], function(response){
var wholeData = "";
response.setEncoding('utf8');
response.on('error', console.error);
response.on('data', function(data){
wholeData += data;
});
response.on('end', function(){
ended ++;
strings[???] = data;
if(ended == urls.length)
printStrings();
});
});
}
答案 0 :(得分:1)
您正在使用http.get()
的单个网址:urls[i]
。
response
将与urls[i]
对应。
答案 1 :(得分:0)
如果您要分配strings[i] = wholeData
,则必须更改循环方式,因为该事件处理程序中i
的值将等于urls.length
。您可以使用像async
这样的库来避免您不得不保留请求计数器等等,但如果您想保留现有代码,则需要在http.get()
周围使用闭包来捕获{ {1}}或只使用i
:
urls.forEach()
或者您可以通过将urls.forEach(function(url, i) {
http.get(url, function(response){
var wholeData = '';
response.setEncoding('utf8');
response.on('error', console.error);
response.on('data', function(data){
wholeData += data;
});
response.on('end', function(){
++ended;
strings[i] = wholeData;
if (ended === urls.length)
printStrings();
});
});
});
作为对象并执行strings
来按照网址而不是数组索引对结果进行分组。