【问题标题】: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。

标签: node.js asynchronous request


【解决方案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);
});

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2019-01-05
    • 2011-01-08
    • 2014-08-22
    相关资源
    最近更新 更多