Javascript 使用SwitchMap的Rxjs倒计时
RXJS倒计时计时器突然停止,我可以发现它被switchMap取消,当可信数据没有发出时 如何修复它?我需要点击按钮启动计时器。 请找到我的示例的jsbinJavascript 使用SwitchMap的Rxjs倒计时,javascript,timer,rxjs,Javascript,Timer,Rxjs,RXJS倒计时计时器突然停止,我可以发现它被switchMap取消,当可信数据没有发出时 如何修复它?我需要点击按钮启动计时器。 请找到我的示例的jsbin const start=Rx.Observable.fromEvent(document.querySelector('btn'),'click'); 开始 .switchMap(()=>{ 返回接收可观察定时器(0,1000) .takeUntil(接收可观测计时器(60000+1000)) }) .map((值)=>60000-值*
const start=Rx.Observable.fromEvent(document.querySelector('btn'),'click');
开始
.switchMap(()=>{
返回接收可观察定时器(0,1000)
.takeUntil(接收可观测计时器(60000+1000))
})
.map((值)=>60000-值*1000)
.map(功能(i){
返回“定时器(秒):+i/1000;
}).订阅(功能(文本){
var container=document.querySelector(“#app”);
container.textContent=文本;
});代码>
RxJS 5运算符
开始
const start$=Rx.Observable.fromEvent(document.querySelector('btn'),'click');
开始$
.switchMap(()=>{
返回接收可观察定时器(0,1000)
.takeUntil(接收可观测计时器(3000+1000))
.map(值=>3000-值*1000)
.map(功能(i){
返回“定时器(秒):+i/1000;
});
})
.订阅(功能(文本){
var container=document.querySelector(“#app”);
container.textContent=文本;
});代码>
RxJS 5运算符
开始
尝试将takeUntil(…)
更改为take(…)
发件人:
.takeUntil(Rx.Observable.timer(60000 + 1000))
.take(60000 / 1000 + 1)
至:
.takeUntil(Rx.Observable.timer(60000 + 1000))
.take(60000 / 1000 + 1)
猜测原因:
.takeUntil(Rx.Observable.timer(60000 + 1000))
.take(60000 / 1000 + 1)
如果计时器累积了时间错误,takeUntil
可以在预期的计时器事件发生之前触发
time
[0] 0.000
[1] 1.103
...
[59] 60.234
61.003 <- takeUntil fired
[60] 61.123 <- expected last event lost
时间
[0] 0.000
[1] 1.103
...
[59] 60.234
61.003我将开始通过正确格式化代码来修复它。我已经在一个小应用程序中实现了一个倒计时来展示ngrx,名为。它可能会帮助你:)@artur grzesiak Done:)代码格式我看不出你的代码有什么不同,除了持续时间。多亏了@thatsseeyou。这似乎奏效了。你能解释一下原因吗?我接受你的建议answer@satz我在帖子中添加了原因。这可能是一个有效的原因,当数据不值得Trsutworth时,switchmap将执行rest。非常感谢:)