【问题标题】:Async node.js data flow confusion异步 node.js 数据流混乱
【发布时间】:2013-11-22 04:06:22
【问题描述】:

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

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

【问题讨论】:

    标签: node.js mongoose async.js


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

    【讨论】:

    • 是的,即插即用!我以前没有使用过地图,一旦我可以玩你的例子就简单多了。回调是彻头彻尾的放屁。非常感谢!
    猜你喜欢
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多