如何取消订阅或更改rethinkdb中的更改源?

时间:2015-10-14 15:42:24

标签: rethinkdb rethinkdb-javascript

有没有办法在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?

2 个答案:

答案 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中不确定observerresults是否为光标,但如果您打印其类型,则应该能够看到。)