gpt4 book ai didi

Angular:我应该取消订阅 switchMap

转载 作者:行者123 更新时间:2023-12-04 14:45:42 26 4
gpt4 key购买 nike

我有以下组件:

@Component({...})
export class AppComponent implements OnInit, OnDestroy {

destroy$ = new Subject();
update$ = new Subject();

result: Result;

constructor(service: Service) {
}

ngOnInit() {
update$.pipe(
takeUntil(this.destroy$),
switchMap(() => this.service.get())
).subscribe(result => this.result = result);

this.refresh();
}

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

refresh() {
this.update$.next();
}

}

这种方法是否正确?或者我应该打电话 takeUntil(this.destroy$)switchMap ?
update$.pipe(
switchMap(() => this.service.get()),
takeUntil(this.destroy$)
).subscribe(result => this.result = result);

还是我应该叫它两次?
update$.pipe(
takeUntil(this.destroy$),
switchMap(() => this.service.get()),
takeUntil(this.destroy$)
).subscribe(result => this.result = result);

最佳答案

最干净的方法是调用takeUntilswitchMap .

update$.pipe(
switchMap(() => this.service.get()),
takeUntil(this.destroy$)
).subscribe(result => this.result = result);

这将防止对订阅的任何排放。如果您添加 takeUntil之前, switchMap订阅将发出值直到 project 返回的可观察对象功能完成,这可能永远不会(取决于您的服务代码)。

没有必要调用 takeUntil之前和之后 switchMap ,因为 switchMap取消订阅源 observable( switchMap 之前的所有内容),当它本身被取消订阅时。

关于Angular:我应该取消订阅 switchMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58520753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com