我正在学习使用出色的Bacon.js库进行函数式反应式编程。将处理程序添加到属性或流很容易:
handler = function(value){... do something ...}
property.onValue(handler)
在某处说我想取消此订阅,如下所示(伪代码):
property.unsubscribe(handler)
有没有办法用 Bacon.js 做到这一点?
上面两个答案都是正确的。就个人而言,我从未使用过任何一种解决方案。事实上,它们的存在主要是为了内部目的以及编写自定义组合器和集成。
因此,我建议使用take
,takeWhile
和takeUntil
. 在 FRP 应用程序中,触发需求的信号通常可以建模为 EventStream。在这种情况下,你可以做
var data, stopper // EventStreams
data.takeUntil(stopper).onValue( .. )
从文档中:
stream.subscribe(f) 将给定的处理函数订阅到事件流。函数将接收事件对象(见下文)。subscribe() 调用返回一个取消订阅函数,您可以调用该函数取消订阅。您还可以通过从处理函数返回 Bacon.noMore 作为对事件的回复来取消订阅。