我正在学习使用精彩的Bacon.js库进行功能反应式编程。将处理程序添加到属性或流很容易:
handler = function(value){... do something ...}
property.onValue(handler)
在某个地方说我要取消此订阅,就像这样(伪代码):
property.unsubscribe(handler)
有没有办法用Bacon.js做到这一点?
答案 0 :(得分:11)
上述两个答案都是正确的。就个人而言,我从未使用过任何一种解决方案。实际上,它们主要用于内部目的和编写自定义组合器和集成。
因此,我建议使用take
,takeWhile
和takeUntil
等组合器。在FRP应用程序中,触发需求的信号通常可以建模为EventStream。在这种情况下,你可以做
var data, stopper // EventStreams
data.takeUntil(stopper).onValue( .. )
答案 1 :(得分:3)
来自文档的"cleaning up"部分:
调用subscribe()调用返回的dispose()函数。
所以你必须保存onValue
的回报:
var dispose = property.onValue(handler)
然后调用它来删除监听器:
dispose();
答案 2 :(得分:1)
stream.subscribe(f)将给定的处理函数订阅到事件流。函数将接收Event对象(见下文)。 subscribe()调用返回一个unsubscribe函数,您可以调用unsubscribe。您也可以通过从处理程序函数返回Bacon.noMore作为对事件的回复来取消订阅。