-1

在以下查询中,回调函数永远不会触发。它几乎是一个查询的逐字克隆,在我的应用程序的其他地方运行良好。所以我无法弄清楚问题是什么。有人能发现我做错了什么吗?

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);
4

2 回答 2

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...

看看能不能帮到你。

于 2013-02-23T04:56:06.060 回答
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);
        }
    });
}
于 2013-02-23T04:57:13.137 回答