获得未定义值的原因是因为find函数是异步的,并且可以随时完成。在您的情况下,使用后就结束了
console.log(),因此在访问它们时值是不确定的。
若要解决此问题,您只能使用find函数的回调中的值。它看起来像这样:
var Person = mongoose.model('Person', PersonSchema);var Product = mongoose.model('Product', ProductSchema);var myObject = new Object();function getData(docs, callback) { function loop(i) { Product.find({ user: docs[i]._id}, function (err, pers) { myObject[i] = pers; if (i < docs.length) { loop(i + 1); } else { callback(); } }); }; loop(0);};Person.find().exec(function(err, docs) { getData(docs, function() { // myObject has been populated at this point });});数据处理已移至等待上一迭代完成的循环。这样,我们可以确定何时触发了最后一个回调,以便在包装函数中触发该回调。



