我正在努力应对这个特殊的挑战:
练习9-杂耍异步
您必须收集每个URL提供给您的完整内容,并将其打印到控制台(stdout)。您不需要打印长度,只需将数据打印为字符串;每个URL只需一行。问题是,您必须按照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的顺序输出的。
发布于 2016-07-22 19:32:47
为此,您可以使用async.eachSeries,即使这个URL调用异步。这是很好的解释这里。
https://stackoverflow.com/questions/38532785
复制相似问题