在完成执行nodejs的for循环之后,for循环中执行的Mongoose Query没有被推入空数组

时间:2018-01-25 15:13:20

标签: javascript arrays node.js mongodb mongoose

说,我有一个带有一系列值传入的模型,

[ { _id: 5a69e13780e4172d514ed906, hobbyname: 'Teaching', __v: 0 },
{ _id: 5a69e1477a40892d6416f906, hobbyname: 'Cricket', __v: 0 }]

var arr = [];
    for(var i=0; i < someModel.length; i++){
    Hobby.find({})
       .then(function(hob){
           arr[i] = someModel[i].hobbyname;
       })
       .catch(function(err){
           console.log(err);
       });
    }
console.log(arr);

目前它的日志记录为[],我希望它完成查询执行,将值推送到arr,然后给我结果。

我简化了我的项目方案,只是为了让它易于理解,我是一个新的bie,需要帮助,提前谢谢。

1 个答案:

答案 0 :(得分:1)

所有数据处理都应该在回调函数中

   Hobby.find({})
     .then(function(hob){
        console.log(hob);
        //here **hob** already contains the result of Mongo query - it's an array
        //so put your processing code here
     })
     .catch(function(err){
         console.log(err);
     });

如果你想通过id或其他条件从Mongo中捕获数据,你需要在find查询中设置这样的条件 的更新: 或者您可以在获取数据后使用async.waterfall来处理数据

async.waterfall(
  [
    function(callback) {    
     Hobby.find({})
       .then(function(hob){
          console.log(hob);
          return callback(null, hob);
       })
       .catch(function(err){
           console.log(err);
           return callback(err);
       });
    },
    function(hobbies, callback) {
      //here you get all retrieved hobbies to work on
      //**hobbies** - is result array
      //you may process it here

      return callback(null, hobbies);
    }
  ],
  function(err, result) {
    if (err) {
      console.log(err);

    }

    return next();
  }
);