如何取消订阅Bacon.js中的处理程序?

时间:2013-10-11 21:25:59

标签: bacon.js

我正在学习使用精彩的Bacon.js库进行功能反应式编程。将处理程序添加到属性或流很容易:

handler = function(value){... do something ...}
property.onValue(handler)

在某个地方说我要取消此订阅,​​就像这样(伪代码):

property.unsubscribe(handler)

有没有办法用Bacon.js做到这一点?

3 个答案:

答案 0 :(得分:11)

上述两个答案都是正确的。就个人而言,我从未使用过任何一种解决方案。实际上,它们主要用于内部目的和编写自定义组合器和集成。

因此,我建议使用taketakeWhiletakeUntil等组合器。在FRP应用程序中,触发需求的信号通常可以建模为EventStream。在这种情况下,你可以做

var data, stopper // EventStreams
data.takeUntil(stopper).onValue( .. )

答案 1 :(得分:3)

来自文档的"cleaning up"部分:

  

调用subscribe()调用返回的dispose()函数。

所以你必须保存onValue的回报:

var dispose = property.onValue(handler)

然后调用它来删除监听器:

dispose();

Here's a demo.

答案 2 :(得分:1)

来自documentation

stream.subscribe(f)将给定的处理函数订阅到事件流。函数将接收Event对象(见下文)。 subscribe()调用返回一个unsubscribe函数,您可以调用unsubscribe。您也可以通过从处理程序函数返回Bacon.noMore作为对事件的回复来取消订阅。