繁体   English   中英

Angular rxjs 区间未订阅

[英]Angular rxjs interval not subscribing

我有这段代码:

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

_unsub$ 是在 ngOnDestroy 方法中触发的主题。 我的问题是 myFunc 永远不会被执行。

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

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

作品。 我的计时器问题是,即使我打电话,有时也会调用 function

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

任何猜测为什么会发生这种情况?

间隔和计时器都是冷可观察对象,可观察对象是惰性的(与承诺不同),因此在您订阅之前不会调用您的计时器,并且在您订阅时会创建一个新计时器。

这两个设置是相同的:

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$信号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM