Счетчик возврата в обратном вызове db.collection.count() не работает, почему?

Я хочу отслеживать количество документов в коллекции на сервере node.js, используя драйвер mongodb. Я могу вставлять, удалять и обновлять заранее, но когда я пытаюсь считать, это работает, пока я не попытаюсь сохранить это значение, момент, когда он ничего не возвращает.

Вот мой код:

var db_collection = db.collection('collection');

var countCollections = function () {

    var response_count_collections = null;
    db_mensajes.count(function(err,number_of_collections){
        if (err){
            console.log(err);
        } else {
            response_of_collections = number_of_collections;
            console.log('Number of collections: '+number_of_collections);
        }
    });
    return response_count_collections;
};

Он правильно регистрирует number_of_collections, но не возвращает правильное значение. В моем примере это возвращает нуль (как я определил мой var response_count_collections;) и если я попытаюсь return number_of_collections; в обратном вызове db_collections.count() следующим образом:

var db_collection = db.collection('collection');

var countCollections = function () {

    var response_count_collections = null;
    db_mensajes.count(function(err,number_of_collections){
        if (err){
            console.log(err);
        } else {
            console.log('Number of collections: '+number_of_collections);
            return number_of_collections;
        }
    });
};

Это возвращает меня "неопределенный". Есть ли способ добиться того, чего я хочу?

1 ответ

Решение

Это потому, что он возвращает переменную до полного выполнения функции.

Если вы хотите, чтобы он был асинхронным, вам нужно научиться управлять потоком программы с помощью некоторых узловых модулей, таких как async.

Обновить:

Посмотрите на этот вопрос, он показывает, как правильно вернуть значение из асинхронной функции, используя обратный вызов.

Другие вопросы по тегам