繁体   English   中英

异步并行最终回调不会触发

[英]Async parallel final callback doesn't fire

我确实有一个异步并行块来对MongoDB执行两个查询。 在函数的每个步骤(回调)上,我都有一个有效的返回结果,没有引发任何错误。 我做了调试,所有步骤都在工作,除了最后的回调不触发,而且无法通过断点达到其条件。 有人知道会发生什么吗?

async.parallel([

// first Query
function(callback){
  this._game.findOne({'_id': gameId}, function(err, result){
    if(err){return callback(err);}
    else if(result) {
      callback(null, result);
    }
  });
},

// second Query
function(callback){
  this._player.findOne({'_id': playerId}, function(err, result){
    if(err){return callback(err);}
    else if(result) {
      callback(null, result);
    }
  });
}
],

  // Final callback to send all 2 Results -> which is not working...
  function(error, results){

    if(results){

      res.status(200);
      res.send(results);
    }
  }
);`

您不应对Mongo找不到任何结果的可能性。 在这种情况下,它将使用err调用回调,并且result为null。 发生这种情况时,并行运行的函数不会调用其回调,因此最终函数永远不会运行。 在这种情况下,您可以执行什么操作,但是您需要使用一些方法来调用callback函数。

无法获得任何结果的原因很可能是playerId和gameId是字符串,而_id默认是ObjectId。 添加一个var ObjectId = require('mongodb').ObjectId; ,然后将playerId替换为ObjectId(playerId) ,您可能会看到结果。

这就是我调试它的方式:

async.parallel([

// first Query
function(fq_callback){
  this._game.findOne({'_id': gameId}, function(fq_err, fq_result){
    if(fq_err){
      console.log('err from _game.findOne');
      return fq_callback(fq_err);
    }
    else if(fq_result) {
      console.log('result from _game.findOne');
      fq_callback(null, fq_result);
    }
  });
},

// second Query
function(sq_callback){
  this._player.findOne({'_id': playerId}, function(sq_err, sq_result){
    if(sq_err){
      console.log('err from _player.findOne');
      return sq_callback(sq_err);
    }
    else if(sq_result) {
      console.log('result from _player.findOne');
      sq_callback(null, sq_result);
    }
  });
}
],

  // Final callback to send all 2 Results -> which is not working...
  function(fn_error, fn_results){
    console.log('in final callback');
    if(fn_error) console.log('we have error');
    if(fn_results){
      console.log('we have results');
      res.status(200);
      res.send(results);
    }else{
      console.log('we have NO results');
    }

  }
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM