我有一个观察量,它结合了间隔和日期 Select 动作.我用combineLatest
和switchMap
向这两个观察点提出请求.其思想是,用户正在查看特定日期的表(可以随时更改),并且该表应该每隔20秒更新一次(该时间可由用户配置).
data$ = combineLatest(
this.refreshInterval$,
this.dateSelected$
).pipe(
switchMap(([_, date]) => this.requestDataForDate(date))
);
这是有效的,除非请求花费的时间超过20秒.如果请求花费很长时间,则每次触发该间隔时,它将取消正在进行的请求并发出新的请求.这是有道理的,因为我使用的是switchMap
,如果我改成concatMap
,那么这种情况就不会发生.
然而,如果用户更改了日期,则应发出另一个请求并取消前一个请求,这在使用concatMap
时不会发生.
我怎样才能同时做到这两点呢?如果用户更改日期,则无论如何都应重新提交请求,但如果在请求进行期间触发间隔,则不应重新提交请求