【发布时间】:2015-07-04 08:12:32
【问题描述】:
我在 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' }
但是,以不同的形式运行相同的代码(通过手动定义数组“tasks”) 似乎工作正常......:
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);
});
知道我做错了什么吗?我到处搜索,还没有找到答案
【问题讨论】:
标签: node.js http asynchronous