[英]RxJS: How to delay next emitted value?
我有异步函数handleParamsChanges
可能需要几秒钟才能解决。 当 observable 发出值时,我会调用它:
this._activatedRoute.params
.subscribe(params => {
this.handleParamsChanges(params).then(() => {
// new value can be processed now
});
});
我如何修改我的代码,以便如果 observable 一个接一个地发出 2 个值,第一个handleParamsChanges
被调用作为第一个值,并且只有在这个承诺解决后,它才会被第二个值调用,依此类推。
编辑:
这是我想出的解决方案,但我猜有更好的方法来做到这一点:
const params$ = this._activatedRoute.params;
const canExecute$ = new BehaviorSubject(true);
combineLatest(params$, canExecute$)
.pipe(
filter(([_, canExecute]) => canExecute),
map(([params]) => params),
distinctUntilChanged()
)
.subscribe(async params => {
canExecute$.next(false);
try {
await this.handleParamsChanges(params);
} catch (e) {
console.log(e);
} finally {
canExecute$.next(true);
}
})
我正在使用canExecute$
来延迟新值的处理。
我需要在这里使用distinctUntilChanged
以避免创建无限循环。
您正在寻找的是concatMap
。 在再次订阅之前,它会等待之前的“内部 observable”完成。 你也可以大大简化你的管道:
params$.pipe(
concatMap(params => this.handleParamsChanges(params)),
).subscribe()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.