[英]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.valueChanges
或ActivatedRoute.queryParamMap
那么完成它們將使forkJoin
發射,這很可能不是你想要的。
根據文檔。 forkJoin
發出所有已完成 observable的最后一個值,因此根據定義,內部 observable 已經完成,因此您無需取消訂閱它們。
只需在.takeUntil
上使用forkJoin
就足夠了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.