2015-04-25 28 views
0

我遇到了在nodejs中使用異步和http的非常奇怪的問題。這裏是我的代碼:無法在nodejs中使用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

process.argv[5]不存在。

as process.argv[5]應該是第四個參數。 並且您只提供了3個過程參數。 ,並且您正在向undefined網址發送http請求。 ,所以你的連接被拒絕。