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

刚开始使用Nodejs,并在下面的代码中将数组作为响应时,面临这个问题。 我知道这是由于Nodejs的asynchronous性质,试图应用asynchronous,但没有得到所需的结果。 有人可以让我知道这个代码的修复:

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(); }); 

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