异步node.js数据流混乱

时间:2013-11-10 09:07:29

标签: node.js mongoose async.js

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

我的问题是,无论我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); 
}); 

1 个答案:

答案 0 :(得分: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); 
});