我有一个可观察的,它结合了间隔和日期选择操作。我使用 combineLatest
和 switchMap
向这两个可观察量发出请求。这个想法是用户正在查看特定日期的表(可以随时更改),并且该表应每 20 秒更新一次(此时间可由用户配置)。
data$ = combineLatest(
this.refreshInterval$,
this.dateSelected$
).pipe(
switchMap(([_, date]) => this.requestDataForDate(date))
);
除了请求时间超过 20 秒的情况外,此方法有效。如果请求花费的时间很长,那么每次触发间隔时,它都会取消正在进行的请求并发出新的请求。这是有道理的,因为我使用的是 switchMap
,如果我更改为 concatMap
那么这种情况就不会发生。
但是,如果用户更改日期,则应发出另一个请求,并取消前一个请求,而使用 concatMap
时不会发生这种情况。
我怎样才能实现这两个目标?如果用户更改日期,无论如何,请求都应该重新提交,但如果在请求正在进行时触发间隔,则不应重新提交
最佳答案
使用dateSelected$
作为基础,您可以:
首先
切换
到refreshInterval$
然后
exhaus|concat
请求的时间间隔data$ = this.dateSelected$.pipe( switchMap((date) => this.refreshInterval$.pipe(exhaustMap(() => this.requestDataForDate(date))) ) );
关于angular - Rxjs 间隔请求如果仍在进行中则不应重置,但如果用户更改输入则应重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77502972/