【问题标题】:Getting empty array because of the asynchronous nature of Nodejs由于 Nodejs 的异步特性而获取空数组
【发布时间】:2016-10-18 14:16:49
【问题描述】:

刚开始使用 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();
  });

【问题讨论】:

    标签: node.js asynchronous mongoose


    【解决方案1】:

    您可以为此任务使用 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();
                }
            });
        }
    
    });
    

    【讨论】:

    • 哦。没有这样想。非常感谢@Kairat
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多