无法在nodejs中与http进行异步工作

时间:2015-04-25 18:47:08

标签: node.js http asynchronous

我在nodejs中使用async和http遇到了一个非常奇怪的问题。这是我的代码:

http = require('http');
bl = require('bl');
async = require('async');

var tasks = [];

var dataItems = [];

var callHttp = function(index, callback) {
  http.get(process.argv[index], function(response) {

      response.pipe(bl(function(err, data) {
        if (err)
          return console.log(err);
        dataItems[index] = data.toString();
      }));

      response.on('end', callback);

    })
    .on('error', console.error);
}

var indices = [2, 3, 4, 5];
indices.forEach(function(item) {
  tasks.push(function(callback) {
    callHttp(item, callback);
  });
});



async.parallel(tasks, function(Err) {
  console.log(dataItems);
});

使用

运行上述代码
node async-http.js 'http://www.google.com/' 'http://academics.vit.ac.in/' 'http://www.example.com' 

给了我以下错误:

{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }

但是,以不同的形式运行相同的代码(通过手动定义数组'任务') 似乎工作得很好......:

http = require('http');
bl = require('bl');
async = require('async');

var tasks = [];

var dataItems = [];

var callHttp = function(index, callback) {
  http.get(process.argv[index], function(response) {

      response.pipe(bl(function(err, data) {
        if (err)
          return console.log(err);
        dataItems[index] = data.toString();
      }));

      response.on('end', callback);

    })
    .on('error', console.error);
}



async.parallel([
  function(callback) {
    callHttp(2, callback);
  },
  function(callback) {
    callHttp(3, callback);
  },
  function(callback) {
    callHttp(4, callback);
  }], function(Err) {
  console.log(dataItems);
});

任何想法我可能做错了什么?我到处搜索,但尚未找到答案

1 个答案:

答案 0 :(得分:1)

process.argv[5]不存在。

因为process.argv[5]应该是第四个参数。 并且您只提供了3个进程参数。 并且您正在向http网址发送undefined个请求。 所以你的连接被拒绝了。