簡體   English   中英

forkJoin 上的 takeUntil 是否調用 forkJoined observables 上的函數?

[英]Does takeUntil on forkJoin calls the function on forkJoined observables?

調用forkJoin

forkJoin(observableA, observableB)
  .pipe(takeUntil(onDestroy$))

添加.pipe(takeUntil(onDestroy$))以在 Angular 中的組件被銷毀時釋放 observable。 這是否也被 observableA 和 obserableB 調用? 還是應該在傳遞給forkJoin所有 observable 上單獨調用它?

它將自動取消訂閱源 observables。

一個簡單的測試來確認。

import { of, interval, forkJoin } from 'rxjs'; 
import { map, takeUntil, delay, tap } from 'rxjs/operators';

const source1 = interval(200).pipe(tap(i => console.log(i)));
const source2 = interval(300).pipe(tap(i => console.log('a' + i)));

const stop = of('stop').pipe(delay(2000));

forkJoin(source1, source2).pipe(takeUntil(stop)).subscribe();

在 2 秒內記錄值然后停止。

最好的方法是像你一樣使用takeUntil 那是使用它通過管道傳輸到forkJoin() forkJoin()將自動取消訂閱其所有源 Observable(源 Observable 未完成。它們只是取消訂閱)。

重要的是,如果您在源 Observables 上使用takeUntil ,您將不會得到相同的行為。

forkJoin()在其所有源 Observables 完成后發出,所以如果你的源 Observables 是例如FormControl.valueChangesActivatedRoute.queryParamMap那么完成它們將使forkJoin發射,這很可能不是你想要的。

根據文檔 forkJoin發出所有已完成 observable的最后一個值,因此根據定義,內部 observable 已經完成,因此您無需取消訂閱它們。

只需在.takeUntil上使用forkJoin就足夠了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM