2015-10-14 83 views
3

有没有办法在rethinkdb中取消订阅或更改现有的changefeed observer?将changes()函数的返回值设置为null似乎没有任何作用,是否有unsubscribe()函数?如何取消订阅或更改rethinkdb中的更改进料?

我最想做的就是在创建更改供稿之后更改其中一个索引过滤器参数(收藏夹)(因为连接上的更改供应不起作用,并且如果基础收藏夹集合更改,我必须更改供稿)。

这是在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

不知道您用于JS的库是什么。随着rethinkdb + rethinkdb池,你可以使用这个语法:

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(); 
0

示例代码,我不熟悉,尤其是JS的驱动程序,但一般你应该在某些时候收到一个光标,对光标呼吁close将关闭changefeed。 (我不确定在上面的API中,observerresults是否是光标,但是如果您打印它们的类型,则应该可以看到。)