有没有办法在rethinkdb中取消订阅或更改现有的changefeed观察者?将changes()函数的返回值设置为null似乎没有做任何事情,是否有unsubscribe()函数?
我理想的做法是在创建更改源后更改其中一个索引过滤器参数(收藏夹)(因为连接上的更改源不起作用,如果底层收藏夹集合发生更改,我必须更改源)
以下是javascript中的示例代码
var observer = r.table("users")
.getAll(r.args(favorites), {index:"name"})
.changes().then(function(results) {
results.each(function(err,row) {
if (err) console.error(err);
var prefix = row.new_val ? 'added' : 'deleted';
var msg = row.new_val ? row.new_val : row.old_val;
console.log(prefix + ': ' + msg.name);
});
});
observer = null; //what do I do there to have it stop observing or unsubscribe... or change the subscription to something else.. say adding a filter or changing a filter?
答案 0 :(得分:2)
不知道你用什么库用于JS。使用rethinkdb + rethinkdb-pool,您可以使用以下语法:
r.table("users").getAll(r.args(favorites), {index:"name"})
.changes().run(connection, function(err, cursor) {
cursor.each(function(err,row) {
if (err) console.error(err);
var prefix = row.new_val ? 'added' : 'deleted';
var msg = row.new_val ? row.new_val : row.old_val;
console.log(prefix + ': ' + msg.name);
});
}
之后,您可以close cursor停止接收更改:
cursor.close();
或者你可以close connection,它会自动关闭与连接相关的所有游标:
connection.close();
答案 1 :(得分:0)
我特别不熟悉JS驱动程序,但通常你应该在某个时候收到一个游标,并且在该游标上调用close
将关闭更改源。 (我在上面的API中不确定observer
或results
是否为光标,但如果您打印其类型,则应该能够看到。)