簡體   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