多个异步请求
Posted
技术标签:
【中文标题】多个异步请求【英文标题】:Multiple async request 【发布时间】:2015-01-17 10:05:03 【问题描述】:好吧,我在这里尝试在对象列表中进行一些验证,但是函数验证调用了三个异步方法(它们向数据库发出请求)。但是当我并行调用 then 时,应用程序给出了错误 500。
_.each(titlesToSave, function(title, index)
titleValidator.validateAsync(title, function (err)
if (err)
invalidTitles.push(index: index, error: err);
joinArray[index]();
);
);
var validateAsync = function (title, next)
async.parallel([
function(callback) checkCity(title.carrier.address, callback),
function(callback) checkCity(title.beneficiary.address, callback),
function(callback) checkCity(title.seller.address, callback)
],
function (err,results)
if(err)
console.log('ERROR: ' +err);
next(err);
else
console.log('Result: '+results);
next();
);
;
var checkCity = function(adress, callback)
var url = 'http://localhost:9000/api/city/'+adress.state+'/'+adress.city;
if (adress)
http.get(url, function (res)
console.log('STATUS: ' + res.statusCode);
res.on('data', function (chunk)
if (res.statusCode === 200)
console.log(''+chunk);
callback(null, chunk);
else
console.log('Invalid city: '+adress.city+', StatusCode: ' + res.statusCode);
callback(new Error('Invalid adress.'));
);
).on('error', function (error)
callback(error);
);
;
【问题讨论】:
服务器错误日志中有什么内容? 你真的不应该在你的data
事件处理程序中做你的回调,因为data
可以被多次发出。将该代码放在 res.on('end', ...)
处理程序中。
3 个函数的 res.statusCode = 500。
【参考方案1】:
试试这个,
async.eachSeries(titlesToSave, function (title, index, next)
titleValidator.validateAsync(title, function (err)
if (err)
invalidTitles.push(index: index, error: err);
joinArray[index]();
next(null);
);
, function (err)
console.log(err);
);
【讨论】:
以上是关于多个异步请求的主要内容,如果未能解决你的问题,请参考以下文章