4

有没有办法取消订阅或更改 rethinkdb 中现有的 changefeed 观察者?将 changes() 函数的返回值设置为 null 似乎没有任何作用,有 unsubscribe() 函数吗?

理想情况下,我想做的是在创建 changefeed 之后更改索引过滤器参数(收藏夹)之一(因为连接上的 changefeeds 不起作用,如果基础收藏夹集合发生更改,我必须更改提要)。

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

2 回答 2

4

不知道你用的是什么库 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);
     });
}

因此,之后您可以关闭光标以停止接收更改:

cursor.close();

或者您可以关闭连接,它会自动关闭与连接关联的所有游标:

connection.close();
于 2015-10-14T17:48:34.453 回答
0

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

于 2015-10-14T17:30:08.913 回答