2

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

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

在某处说我想取消此订阅,​​如下所示(伪代码):

property.unsubscribe(handler)

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

4

3 回答 3

11

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

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

var data, stopper // EventStreams
data.takeUntil(stopper).onValue( .. )
于 2013-10-12T06:38:52.297 回答
3

从文档的“清理”部分:

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

所以你必须保存返回onValue

var dispose = property.onValue(handler)

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

dispose();

这是一个演示。

于 2013-10-11T21:32:07.740 回答
1

文档中:

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

于 2013-10-11T21:36:49.660 回答