我正在努力应对这一特殊挑战:
练习9 - 玩弄异步
您必须收集每个网址提供给您的完整内容,然后将其打印到控制台(标准输出)。您不需要打印长度,只需将数据打印为String;每个网址一行。问题在于您必须按照与作为命令行参数提供的URL相同的顺序打印它们。
这是我的代码:
var http = require('http');
var bl = require('bl')
var results = [];
var count = 0
function getURLs() {
var urls = []
for(var i = 2; i < process.argv.length; i++){
urls.push(process.argv[i]);
}
return urls
}
function getHTTP(url){
http.get(url, function(response){
response.pipe(bl(function(err,data){
if(err){return console.error(err)}
results[count] = data.toString();
count ++;
if (count === process.argv.length - 2){
printAll()
}
}))
})
}
function printAll(){
for(var i = 0 ; i < results.length; i++){
console.log(results[i])
}
}
function start(){
retrivedURL = getURLs()
for(var i = 0; i < retrivedURL.length; i++){
getHTTP(retrivedURL[i])
}
}
start()
我似乎无法弄清楚它出错的地方 - 它是按照检索到的URL的顺序输出的。