如何真正暂停可观察的rxjs?
我有以下代码:
var pauser = new Rx.Subject();
var animation = new Rx.Subject();
var source = animation.pausableBuffered(pauser);
source
.subscribe(function(frame) {
console.log('subscribe', frame);
setTimeout(function() {
source.resume();
}, frame.duration);
source.pause();
});
pauser.onNext(true);
console.log('start');
animation.onNext({ duration: 1000 });
animation.onNext({ duration: 2000 });
animation.onNext({ duration: 2000 });
http://jsfiddle.net/bbvarga/8yvLhjhe/
我期待有一个启动的消息在控制台中,之后立即订阅,超过1s突破,超过一个订阅消息,超过2秒突破,最后认购
但是一秒钟休息后,我立即收到了最后两个订阅消息。似乎我只能暂停一次可观察对象。
对于那些对我想要实现的目标感兴趣的人:我想拥有一个事件队列,并且想要接收下一个事件,如果上一个事件被调用了一些回调(该事件已完成。现在这只是一个简单的事情) setTimeout)
pausableBuffered在暂停时保留缓冲区,并在调用resume时耗尽缓冲区。您想要的看起来更像是受控的可观察对象source.request(1)
。
有关更多信息,请参见有关反压的rxjs文档。
var animation = new Rx.Subject();
var source = animation.controlled();
source
.subscribe(function(frame) {
console.log('new event', frame);
setTimeout(function() {
console.log('after timeout', frame);
source.request(1);
}, frame.duration);
});
source.request(1);
animation.onNext({ duration: 1000 });
console.log('animation.onNext 1');
animation.onNext({ duration: 2000 });
console.log('animation.onNext 2');
animation.onNext({ duration: 3000 });
console.log('animation.onNext 3')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句