在下面的查询中,回调函数从不触发。这几乎是一个查询的逐字克隆,在我的应用程序的其他地方工作正常。所以我无法弄清楚问题所在。有人可以发现我做错了什么吗?为什么这个Mongo查询中的回调永远不会被调用?
var imagesCollection = db.collection('Images');
var Images = new Array();
while(Images.length < quantity) {
var random = Math.random();
imagesCollection.find({
"audioFiles.audioLanguage": audioLanguage,
"random": {
$lte: random
}
}).limit(1, function(err, doc) {
console.log('This never gets called');
Images.push(doc);
});
}
callback(err, Images);
这似乎是将同一个doc反复推入数组,而不是执行n次查询并将每个结果推送到数组中。循环能否比查询操作更快完成? – hughesdan 2013-02-23 05:18:57
@hughesdan循环将在第一次回调被调用之前完成,但这是预期的。如果同一文档被多次推送,则可能是这个“随机”部分的问题。 – JohnnyHK 2013-02-23 05:25:22
我很确定随机部分作品。似乎正在发生的事情是查询的第一次触发的结果在查询返回的下一次触发之前被多次推入到数组中。不过,我认为你已经回答了有关while循环的原始问题。我会接受你的回答。 – hughesdan 2013-02-23 05:40:30