cursor.toArray(callback)不返回文档数组

时间:2013-12-19 22:36:20

标签: javascript node.js mongodb

我想返回一个包含decks集合文档的数组。 我可以让光标指向那些文档,然后使用toArray()函数将它们转换为数组。

问题是我无法返回已转换的数组...请查看我的代码。

exports.find_by_category = function (category_id){
    var results = []; //Array where all my results will be
    console.log('Retrieving decks of category: ' + category_id);
    mongo.database.collection('decks', function(err, collection) {
        collection.find({'category_id': category_id}).toArray(function(err,items){
            results = items; //Items is an array of the documents
        });
    }); 
    return results; //The problems is here, results seems to be empty...
};

老实说,我不知道自results以来在外围范围内发生了什么。我究竟做错了什么?如何将results作为已找到文档的数组返回。

1 个答案:

答案 0 :(得分:15)

正如@Pointy所指出的,行return results是在collection.find的调用返回任何结果之前同步执行的。

解决这个问题的方法是提供函数的回调,如下所示:

exports.find_by_category = function (category_id, callback){ //Notice second param here  
    mongo.database.collection('decks', function(err, collection) {
       collection.find({'category_id': category_id}).toArray(function(err,items){
           if(err) callback(err);
           else callback(null, items);
        });
    }); 
};

要更好地了解回调的工作原理,请查看此answer。是的,异步编程起初很难,并且需要一些人习惯。