【发布时间】:2020-11-24 10:09:37
【问题描述】:
我有一个基本的可观察计时器,我想在多个订阅者之间共享。
time = 30;
timer$ = timer(0,1000).pipe(
map(i => this.time - i),
take(this.time + 1),
finalize(() => console.log('DONE')),
share()
);
我在模板和组件中都订阅了 observable,在组件中启动计时器,在模板中显示剩余时间。
ngOnInit() {
this.runTimer();
}
runTimer() {
this.timer$.subscribe();
}
{{ timer$ | async }}
这有效,但只是第一次。如果我再次调用 runTimer() 函数(例如触发该调用的按钮),计时器会再次启动,但更改不会反映在我看到 0 的模板中(可能是因为前一个计时器已完成)。
我做错了什么?
我创建了 stackblitz:https://stackblitz.com/edit/angular-ivy-qc759v?embed=1&file=src/app/app.component.ts
【问题讨论】:
-
这能回答你的问题吗? Angular 2 Reset Observable Timer
-
我不明白。 timer$ 是否会因为我有 take(N) 而自动取消订阅?我从接受的答案中尝试了解决方案,但它对我不起作用(参见 stackblitz)。我真的需要一个额外的 observable(Subject) 来让它工作吗?
-
它破坏了我的浏览器,进入无限循环
-
你不想要计时器,你想要倒计时,不是吗?
-
这个答案有一个秒表,您可以开始、停止和重置。如果您使用它而不是
timer,那么您就有了一种强大的方法来重置倒计时。 stackoverflow.com/questions/64676617/pause-an-interval-rxjs/…
标签: angular rxjs rxjs-observables