在下面的代码示例中,意图是通过向Subject
mid$
发出 1 来阻止来自second$
的事件。import { Subject, timer } from "rxjs";
import { switchMap, takeUntil, tap } from "rxjs/operators";
const first$ = timer(1000);
const second$ = timer(2000);
const mid$ = new Subject();
first$.pipe(
tap(() => {
mid$.next(1);
}),
switchMap(() => second$.pipe(
takeUntil(mid$),
tap(() => console.log("MISSED!"))
)),
).subscribe();
mid$.subscribe(() => console.log("RECEIVED"));
但由于控制台显示以下错误,因此某种原因它无法正常工作:
RECEIVED
MISSED!
即,第mid$.next(1);
行中发出的事件未被takeUntil(mid$)
考虑在内。
这里的逻辑是什么?
我注意到,如果我将第mid$.next(1);
行替换为timer(0).subscribe(() => mid$.next(1));
,它可以按预期工作,但我想知道在 RxJS 中处理这种情况的正确方式是什么。
timer(1500).subscribe(() => mid$.next(1));
Stackblitz - moon-413