Angular rxjs的interval不订阅



我有这段代码:

interval(180000).pipe(takeUntil(this._unsub$)).subscribe(() => myFunc())

_不明嫌犯$是一个在ngOnDestroy方法中被触发的对象。我的问题是myFunc永远不会被执行。

同一段代码在另一个组件中工作。我不明白为什么。

timer(0, 180000).pipe(takeUntil(this._unsub$)).subscribe(() => myFunc())

。定时器的问题是,有时调用函数,即使我调用

ngOnDestroy() {
this._unsub$.next();
this._unsub$.complete();
}

你知道为什么会这样吗?

interval和timer都是冷可观察对象,而可观察对象是惰性的(不像promise),所以直到订阅时才调用计时器,并且在订阅时创建一个新的计时器。

这两个设置是相同的:

const firstFunc = () => ...
const secondFunc = () => ...
const interval1$ = interval(180000).pipe(takeUntil(this._unsub$));
const interval2$ = interval(180000).pipe(takeUntil(this._unsub$));
interval1$.subscribe(firstFunc);
interval2$.subscribe(secondFunc);
const firstFunc = () => ...
const secondFunc = () => ...
const interval$ = interval(180000).pipe(takeUntil(this._unsub$));
interval$.subscribe(firstFunc);
interval$.subscribe(secondFunc);

所以你必须考虑.subscribe何时被调用。这是我对解释不同组件中非常相似的代码之间差异的最佳猜测。如果this._unsub$.next();在订阅计时器之前被调用,那么180秒后,计时器仍然会触发,因为它从未接收到_unsub$信号。

最新更新