RxJS:过时时如何忽略流中的项目

RxJS: How to ignore item in stream when outdated

我正在尝试订阅一个 "loading" Observable,它是一个 returns 布尔值。目标是在加载为真时延迟流中的项目,但在加载为假时则不会。也应该可以忽略过时的项目,让我们假设以下情况:

流中有两项:

item A 的值为true,因为它会延迟500ms,item B 不会延迟。在这种情况下,项目 B 将在项目 A 之前到达。对于上述情况,我正在寻找完全忽略项目 A 的解决方案。

在这里你可以看到我当前的无效解决方案:

this.loading$
        .pipe(
            distinctUntilChanged(),
            delayWhen(loading => timer(loading ? 500 : 0))
        )
        .subscribe(loading => {
            // Do something
        });

只需将 delayWhen 替换为 switchMap 即可。 switchMap 可以取消过时的内部流。而且您可能是一次性可观察对象而不是计时器:

this.loading$
        .pipe(
            distinctUntilChanged(),
            switchMap(
               loading => 
                           of(loading).pipe(delay(loading ? 500 : 0)))
        )
        .subscribe(loading => {
            // Do something
        });