我如何取消订阅或更改 rethinkdb 中的更改提要?

How do I unsubscribe or change a changefeed in rethinkdb?

有没有办法取消订阅或更改 rethinkdb 中现有的 changefeed 观察器?把changes()函数的return值设置为null好像也没什么作用,有unsubscribe()函数吗?

我最想做的是在创建更改源后更改其中一个索引过滤器参数(收藏夹)(因为连接上的更改源不起作用,如果基础收藏夹 collection 变化)。

这里是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?

我不是特别熟悉 JS 驱动程序,但通常您应该在某个时候收到一个游标,并且在该游标上调用 close 将关闭更改源。 (我不确定上面的 API 中 observer 还是 results 是光标,但是如果你打印它们的类型你应该能够看到。)

不知道你用的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();