gpt4 book ai didi

ngOnDestroy 中缺少带有 takeUntil : What happens when . next() 的 Angular Observable 销毁

转载 作者:行者123 更新时间:2023-12-04 11:31:01 24 4
gpt4 key购买 nike

在 Angular 7 组件中,我使用 RxJS takeUntil() 正确取消订阅可观察订阅。

  • this.destroy$.next()时会发生什么方法中缺少 ngOnDestroy (见下面的示例)?它仍然会正常退订吗?
  • this.destroy$.complete()时会发生什么方法中缺少 ngOnDestroy (见下面的示例)?它仍然会正常退订吗?
  • 有没有办法强制使用 takeUntil() 取消订阅的模式被正确使用(例如 tslint 规则、npm 包)?


  • @Component({
    selector: 'app-flights',
    templateUrl: './flights.component.html'
    })
    export class FlightsComponent implements OnDestroy, OnInit {
    private readonly destroy$ = new Subject();

    public flights: FlightModel[];

    constructor(private readonly flightService: FlightService) { }

    ngOnInit() {
    this.flightService.getAll()
    .pipe(takeUntil(this.destroy$))
    .subscribe(flights => this.flights = flights);
    }

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

    最佳答案

  • takeUntil将 next 作为发射。如果只是complete()叫它不会退订

  • 试试这个:
    const a=new Subject();
    interval(1000).pipe(takeUntil(a)).subscribe(console.log);
    timer(3000).subscribe(_=>a.complete())
  • this.destroy$仍在内存中,不会被垃圾回收
  • 不是我知道

  • 使用 takeUntil 时也请查看此处以避免内存泄漏.
    https://medium.com/angular-in-depth/rxjs-avoiding-takeuntil-leaks-fb5182d047ef
    我个人更喜欢明确的 unsubscribe摧毁时。

    关于ngOnDestroy 中缺少带有 takeUntil : What happens when . next() 的 Angular Observable 销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58426443/

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