#9挑战 – 了解您的节点(asynchronouscallback)

我在这个特殊的挑战中挣扎着:

练习9 – 杂耍asynchronous

您必须收集每个URL提供给您的完整内容,并将其打印到控制台(stdout)。 您不需要打印出长度,只需将数据打印为string; 每个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的顺序输出的。

你可以使用async.eachSeries来达到这个目的,也就是使这个URL调用asynchronous。 这里很好的解释。