Bacon.interval 如何停止?
How can a Bacon.interval be stopped?
我有一个定期触发的事件:
let periodicEvent = Bacon.interval(1000, {});
periodicEvent.onValue(() => {
doStuff();
});
我想要的是在需要时暂停并重新启动 periodicEvent
。 periodicEvent 如何暂停和重启?或者有没有更好的方法来使用 baconjs?
一种不纯粹的做法是在订阅前添加一个过滤器来检查变量,然后在您不希望订阅的操作发生时更改变量:
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
可能有一种甚至 better/fancier 的方法,但我还没有达到那个水平。 :)
我有一个定期触发的事件:
let periodicEvent = Bacon.interval(1000, {});
periodicEvent.onValue(() => {
doStuff();
});
我想要的是在需要时暂停并重新启动 periodicEvent
。 periodicEvent 如何暂停和重启?或者有没有更好的方法来使用 baconjs?
一种不纯粹的做法是在订阅前添加一个过滤器来检查变量,然后在您不希望订阅的操作发生时更改变量:
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
可能有一种甚至 better/fancier 的方法,但我还没有达到那个水平。 :)