-->

异步的node.js数据流混乱(Async node.js data flow confusion)

2019-10-18 23:27发布

感谢您的帮助......挣扎大时间如何正确地处理这个问题。 我在异步现在,已经放弃了我的正常写回调的能力。 我已经在那里片断我传递一组随机数(eachrecord)的并使它们通过一个猫鼬的呼叫。 试图创建从多个查询我传递一个数据集。

我的问题是,不管是什么,我4小时完成,“newarray”变量始终是空的。

谢谢您的帮助 -

async.forEach(arLimit, function(eachrecord, callback){

  newarray = new Array;

  var query = UGC_DB_Model.find({}).skip(eachrecord).limit(-1);

  query.execFind(function (err, data) {
    if (err)
      console.log(err);
    else {
      newarray.push(data);
    }
  });

   callback(null, newarray);

}, function(err, result) {
  if (err) return next(err);
      console.log("(it's empty): " + result); 
}); 

Answer 1:

有你的代码的几个问题:

  • async.forEach并不意味着“生成”的结果,这就是async.map是;
  • 你需要调用回调函数,只有当execFind完成,而不是调用后立即;
  • newarray可能是没有必要的;

因此,尝试这个:

async.map(arLimit, function(eachrecord, callback){

  var query = UGC_DB_Model.find({}).skip(eachrecord).limit(-1);

  query.execFind(function (err, data) {
    if (err)
      callback(err); // pass error along
    else {
      callback(null, [ data ]);
      // although I think you mean this (because 'data' is probably an array already)
      //   callback(null, data);
    }
  });

}, function(err, result) {
  if (err) return next(err);
  console.log("(it's empty): " + result); 
}); 


文章来源: Async node.js data flow confusion