Команда ReQL: next
Синтаксис команды
cursor.next(callback) array.next(callback) cursor.next() → promise array.next() → promise
Описание
Получить следующий элемент в курсоре.
Вызов next в первый раз для курсора предоставляет первый элемент курсора. Если набор данных исчерпан (например, вы извлекли все документы из таблицы), ошибка ReqlDriverError будет передана в обратный вызов при вызове next.
Пример: Получение следующего элемента.
cursor.next(function(err, row) {
if (err) throw err;
processRow(row);
});
Примечание: Стандартный способ получения всех результатов — использование команд each или toArray. Команда next следует использовать только в тех случаях, когда вам не нужно получить все элементы курсора или вы хотите отложить некоторые операции.
Пример: Вы можете получить все элементы курсора с помощью команды next с использованием рекурсии.
query.run( conn, function(err, cursor) {
if (err) throw err;
var fetchNext = function(err, result) {
if (err) {
if (((err.name === "ReqlDriverError") && err.message === "No more rows in the cursor.")) {
console.log("No more data to process")
// If you use one connection per query, the connection should be closed here.
// conn.close()
}
else {
throw err;
}
}
else {
processRow(result);
cursor.next(fetchNext);
}
}
cursor.next(fetchNext);
})
Пример: С помощью next, не все результаты должны быть извлечены из курсора — чтобы остановить извлечение результатов, прервите рекурсивную функцию. Например, эта рекурсивная функция прекратит извлечение результатов, когда функция checkRow вернёт true:
query.run( conn, function(err, cursor) {
if (err) throw err;
var fetchNext = function(err, result) {
if (err) {
if (((err.name === "ReqlDriverError") && err.message === "No more rows in the cursor.")) {
console.log("No more data to process")
// If you use one connection per query, the connection should be closed here.
// conn.close()
}
else {
throw err;
}
}
else {
if (checkRow(result)) {
cursor.next(fetchNext);
}
else {
cursor.close()
// If you use one connection per query, the connection should be closed here.
// conn.close()
}
}
}
cursor.next(fetchNext);
})
Пример: Вы можете получить все элементы курсора с помощью команды next с использованием рекурсии и промисов.
query.run(conn).then(function(cursor) {
var errorHandler = function(err) {
if (((err.name === "ReqlDriverError") && err.message === "No more rows in the cursor.")) {
console.log("No more data to process")
// If you use one connection per query, the connection should be closed here.
// conn.close()
}
else {
throw err;
}
}
var fetchNext = function(result) {
processRow(result);
cursor.next().then(fetchNext).error(errorHandler);
}
cursor.next().then(fetchNext).error(errorHandler);
}).error(function(err) {
throw err;
});
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/javascript/next/