#9挑战 - 了解您的节点(异步回调)

时间:2016-07-22 18:04:30

标签: javascript node.js asynccallback

我正在努力应对这一特殊挑战:

练习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的顺序输出的。

1 个答案:

答案 0 :(得分:1)

您可以使用async.eachSeries来实现此目的,即使此URL称为异步。很好地解释了here