我有一个定期触发的事件:
let periodicEvent = Bacon.interval(1000, {});
periodicEvent.onValue(() => {
doStuff();
});
我想要的是在需要时暂停并重新启动periodicEvent
。如何暂停和重新启动periodicEvent?或者有没有更好的方法来做baconjs?
答案 0 :(得分:1)
一种不纯的方法是在订阅之前添加一个检查变量的过滤器,然后在不希望订阅操作发生时更改变量:
var isOn = true;
periodicEvent.filter(() => isOn).onValue(() => {
doStuff();
});
“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
可能会有更好/更好的方式,但我还没有达到这个水平。 :)