【发布时间】: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。
标签: node.js asynchronous request