MongoDB cursor.each метод возвращает окончательное нулевое значение - PullRequest
0 голосов
/ 06 июля 2018
var cursor = db.collection('Carreer').find();
cursor.each(function (err, results) {
    // the last results call is null
});

Кажется, что этот цикл выполняется один раз, возвращая null в качестве последнего значения для каждого столбца в таблице. Как мне остановить cursor.each от возврата значения null?

1 Ответ

0 голосов
/ 06 июля 2018

Это ожидаемое поведение cursor.each. Значение null указывает, что результатов больше нет (т. Е. Курсор исчерпан / пуст и закрыт). Если вам не нужен дополнительный вызов null по окончании курсора, вы можете использовать cursor.forEach:

db.collection('Carreer').find().forEach(function(doc) {
  // handle
}, function(err) {
  // done or error
});

Также обратите внимание:

cursor.each устарело .

Почему null?

Метод cursor.each имеет только один обратный вызов , и единственный способ узнать, что курсор закончил, - последний null. Примером реализации может быть:

function fetchAllCareers(callback) {
    const results = [];
    const cursor = db.collection('Carreer').find();
    cursor.each(function(error, result) {
        if (error) {
            callback(error);
            return;
        }
        if (result === null) { // This was the last iteration, we finished
            callback(null, results);
            return;
        }
        results.push(result);
    });
}

С другой стороны, метод cursor.forEach имеет обратный вызов итератора и второй обратный вызов , чтобы сообщить, что итерации завершены. Примером реализации может быть:

function fetchAllCareers(callback) {
    const results = [];
    const cursor = db.collection('Carreer').find();
    cursor.forEach(function(result) {
        results.push(result);
    }, function(error) { // all iterations finished
        callback(error, results);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...