2
我正在学习节点learnyounode exercises from nodeschool。 在第八锻炼他们要求编写一个程序,执行以下操作:Node.js中的异步http.get调用(Learyounode练习)
- 需要三个URL作为参数,从反应
- 收集数据,
- 它们打印到控制台的顺序相同参数。
他们简单地提到了异步库的存在,这有助于计算回调,但他们也会邀请他们在没有他们的情况下完成练习。我的初步解决方案如下:
var http = require('http');
var bl = require('bl');
var results = Array();
var count = 0;
function printResults() {
for (var i = 0; i < 3; i++) {
console.log(results[i]);
}
}
for (var index = 0; index < 3; index++)
http.get(process.argv[2+index], function(response) {
response.pipe(bl(function(err,data){
if(err) console.error(err)
results[index] = data.toString();
count++;
if(count==3) printResults(results);
}));
});
}
但是,由于某种原因,这会打印三次“未定义”。我碰巧找到了正确的解决方案,只需用一个函数替换for循环,并将该函数的调用封装在另一个for循环中即可。
(...)
function httpGet (index) {
http.get(process.argv[2+index], function(response) {
response.pipe(bl(function(err,data){
if(err) console.error(err)
results[index] = data.toString();
count++;
if(count==3) printResults(results);
}));
});
}
for (var i = 0; i < 3; i++)
httpGet(i)
不过,我不明白正是这种差异是如何做出的解决方案的工作。任何人都可以请赐教吗?