在以下查询中,回调函数永远不会触发。它几乎是一个查询的逐字克隆,在我的应用程序的其他地方工作正常。所以我无法弄清问题是什么。有人能发现我做错了吗?
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);
答案 0 :(得分:0)
quantity
var quantity = 10; //declare variable to whatever number it needs to be
var imagesCollection = db.collection('Images');
var Images = new Array();
while(Images.length < quantity) {
//rest of code here...
看看这是否有助于你。
答案 1 :(得分:0)
你的while
循环实际上是一个无限循环,因为只要循环正在运行就不能调用find
回调,并且只有在运行了足够的回调后循环才会退出。
此外,limit
将光标传递给回调,而不是文档,因此您应该使用findOne
代替。
您需要将其重写为:
var imagesCollection = db.collection('Images');
var Images = new Array();
for (var i=0; i<quantity; i++) {
var random = Math.random();
imagesCollection.findOne({
"audioFiles.audioLanguage": audioLanguage,
"random": {
$lte: random
}
}, function(err, doc) {
if (Images.push(doc) === quantity) {
callback(err, Images);
}
});
}