Bacon.interval 如何停止?

How can a Bacon.interval be stopped?

我有一个定期触发的事件:

let periodicEvent = Bacon.interval(1000, {});
periodicEvent.onValue(() => {
    doStuff();
});

我想要的是在需要时暂停并重新启动 periodicEvent。 periodicEvent 如何暂停和重启?或者有没有更好的方法来使用 baconjs?

  1. 一种不纯粹的做法是在订阅前添加一个过滤器来检查变量,然后在您不希望订阅的操作发生时更改变量:

    var isOn = true;
    periodicEvent.filter(() => isOn).onValue(() => {
          doStuff();
    });
    
  2. 一种 "pure-r" 的方法是将输入转换为 true/false 的 属性 并根据 属性:

    // make an eventstream of a dom element and map the value to true or false
    var switch = $('input')
        .asEventStream('change')
        .map(function(evt) {
            return evt.target.value === 'on';
        })
        .toProperty(true);
    
    
    var periodEvent = Bacon.interval(1000, {});
    
    // filter based on the property b to stop/execute the subscribed function
    periodEvent.filter(switch).onValue(function(val) {
        console.log('running ' + val);
    });
    

Here is a jsbin of the above code

使用 Bacon.when 可能有一种甚至 better/fancier 的方法,但我还没有达到那个水平。 :)