由于Nodejs的异步性质而获得空数组

时间:2016-06-16 21:39:08

标签: node.js asynchronous mongoose

刚开始使用Nodejs并在下面的代码中将数组作为响应推送时遇到此问题。我知道这种情况正在发生,因为Nodejs的异步性质,试图同样应用异步,但没有得到理想的结果。有人可以让我知道这段代码的修复:

array = [];
  var company = companySchema.Company;
  company.findOne({_id: companySchema.objectId(req.tempStore.companyId)}, function (err, comp) {
    if (err) {
      console.log(err);
     }
     else {
       var i;
       var length = comp.events.length;
       var dataset = datasetSchema.dataset;
       for (i = 0; i < length; i++) {
         dataset.find({companyId:comp.events[i]}, function (err,data) {
           if (err) {
             console.log(err);
           }
           else {
             array.push(data);
           }

             console.log("array-----"+array);  // prints array here
         });
       }
     }
            console.log("array-----"+array);    // array is empty hence causing empty response
             res.response.data = array;
              next();
  });

1 个答案:

答案 0 :(得分:2)

您可以使用mongoDB $in子句执行此任务:

var company = companySchema.Company;
company.findOne({_id: companySchema.objectId(req.tempStore.companyId)}, function (err, comp) {
    if (err) {
        console.log(err);
    } else {
        var dataset = datasetSchema.dataset;
        dataset.find({companyId : {$in : comp.events}}, function (err, docs) {
            if (err) {
                console.log(err);
            } else {
                console.log("array: " + docs);  // prints array here
                res.response.data = docs;
                next();
            }
        });
    }

});