我有这段代码:
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$
信号。