Счетчик возврата в обратном вызове 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.
Обновить:
Посмотрите на этот вопрос, он показывает, как правильно вернуть значение из асинхронной функции, используя обратный вызов.