我在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);
});
任何想法我可能做错了什么?我到处搜索,但尚未找到答案
答案 0 :(得分:1)
process.argv[5]
不存在。
因为process.argv[5]
应该是第四个参数。
并且您只提供了3个进程参数。
并且您正在向http
网址发送undefined
个请求。
所以你的连接被拒绝了。