1

感谢您的帮助...努力解决如何正确处理这个问题。我现在处于异步状态,已经放弃了正确编写回调的能力。我有一个片段,我正在传递一组随机数(每个记录)并将它们传递给猫鼬调用。试图从我传递的多个查询中创建一个数据集。

我的问题是,无论我做了什么 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); 
}); 
4

1 回答 1

2

您的代码有几个问题:

  • 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); 
}); 
于 2013-11-10T09:28:51.740 回答