Javascript 如何使用rxjs取消内部可观察计时器?
我正试图用可观测的定时器制作一个简单的计数器。室外时间每5秒运行一次。内部计时器每秒钟运行一次,因为我想输出如下内容: 加载。。五, 加载。。四, 加载。。三, 但我的问题是,内在的可观察性并不抵消。它无限延续。正确的做法是什么Javascript 如何使用rxjs取消内部可观察计时器?,javascript,rxjs,Javascript,Rxjs,我正试图用可观测的定时器制作一个简单的计数器。室外时间每5秒运行一次。内部计时器每秒钟运行一次,因为我想输出如下内容: 加载。。五, 加载。。四, 加载。。三, 但我的问题是,内在的可观察性并不抵消。它无限延续。正确的做法是什么 Observable.timer(0, 5000) .pipe( tap(() => { Observable.timer(0, 1000) .subscribe(t => console.log(5 - t));
Observable.timer(0, 5000)
.pipe(
tap(() => {
Observable.timer(0, 1000)
.subscribe(t => console.log(5 - t));
}),
tap(t => {
this.count = this.users.length;
}),
).subscribe();
解决方案
使用switchMap操作符取消外部可观测值
Observable.timer(0, 5000)
.pipe(
switchMap(() => {
return Observable.timer(0, 1000);
}),
tap(t => {
console.log(`%c`, 'background:red', 5 - (t));
this.count = this.users.length;
}),
).subscribe();
我想您需要的是
take
操作符,请参阅[docs]以了解更多说明。您可以使用take(5)
或take(6)
,具体取决于您是要倒计时到0还是1
Observable.timer(0, 5000)
.pipe(
tap(() => {
Observable.timer(0, 1000)
.take(5)
.subscribe(t => console.log(5 - t));
}),
tap(t => {
this.count = this.users.length;
}),
).subscribe();
你必须取消那个计时器的订阅。我用switchMap操作符解决了这个问题。谢谢