Spec-Zone.ru › RethinkDB javascript

Команда 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;
});

Связанные команды

  • each
  • toArray
  • закрыть (cursor)

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/javascript/next/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API