[英]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.