Команда ReQL: EventEmitter (курсор)
Синтаксис команды
cursor.addListener(event, listener) cursor.on(event, listener) cursor.once(event, listener) cursor.removeListener(event, listener) cursor.removeAllListeners([event]) cursor.setMaxListeners(n) cursor.listeners(event) cursor.emit(event, [arg1], [arg2], [...])
Описание
Курсоры и фиды реализуют тот же интерфейс, что и EventEmitter в Node.js: EventEmitter.
- Могут быть выпущены два события:
dataиerror. - После начала использования интерфейса
EventEmitter, другие команды курсоров RethinkDB, такие какnext,toArray, иeach, больше недоступны. - В первый раз при вызове метода
EventEmitter, курсор или фид будут передавать данные сразу после обратных вызовов событий ввода-вывода и до обратных вызововsetTimeoutиsetInterval.
Пример: Трансляция всех сообщений с помощью socket.io.
r.table("messages").orderBy({index: "date"}).run(conn, function(err, cursor) {
if (err) {
// Handle error
return
}
cursor.on("error", function(error) {
// Handle error
})
cursor.on("data", function(message) {
socket.broadcast.emit("message", message)
})
});
Этот запрос можно переписать с помощью команды each:
r.table("messages").orderBy({index: "date"}).run(conn, function(err, cursor) {
if (err) {
// Handle error
return
}
cursor.each(function(error, message) {
if(error) {
// Handle error
}
socket.broadcast.emit("message", message)
})
});
Пример: Трансляция всех вставленных сообщений.
r.table("messages").changes().filter({old_val: null}).run(conn, function(err, feed) {
if (err) {
// Handle error
return
}
feed.on("error", function(error) {
// Handle error
})
feed.on("data", function(newMessage) {
socket.broadcast.emit("message", newMessage)
})
});
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/javascript/ee-cursor/