【问题标题】:Angular + RxJS: use of takeUntil vs simple unsubscribe?Angular + RxJS:使用 takeUntil 与简单取消订阅?
【发布时间】:2023-03-24 13:02:01
【问题描述】:

我在组件中遇到以下代码。

private _destroy$ = new Subject<null>();

// ...

ngOnInit() {
    this.someStream$
        .pipe(filter(a=> a !== null), takeUntil(this._destroy$))
        .subscribe(a => { });
}

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

谷歌搜索这件事给了我one contrasted opinion 关于声明式代码与命令式的信息,后者受到反应式架构的青睐。

考虑到这一点,我的问题是:与我一直处理相同案例的方式(用 sn-p 波纹管说明)相比,除了声明式代码和命令式代码之外,还有其他方面吗?另外,当takeUntil's谓词完成时,如何确认第一种方法最终取消订阅?

private _subscription: Subscription = null;

// ...

ngOnInit() {
    this._subscription = this.someStream$
        .pipe(filter(a=> a !== null) )
        .subscribe(a => { });
}

ngOnDestroy() {
    this._subscription && this._subscription.unsubscribe();
}

【问题讨论】:

  • 我认为,假设您有多个订阅并且需要手动控制所有订阅,那么使用takeUntil 方法是处理它的好方法。关于如何确认takeUntil如何工作的第二个问题,您可以阅读源代码,或创建简单的间隔流,然后在一段时间后与takeUntil结合。
  • @TiepPhan:这不是takeUntil 工作原理的基本概念问题。它是关于细节的:它真的取消订阅,还是只是停止转发项目?这比创建一个简单的流更难测试

标签: angular rxjs


【解决方案1】:

显然,takeUntil 将向订阅方发送“完成”信号,使其完成。这会导致取消订阅。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-14
    • 2018-11-09
    • 2017-04-10
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2018-11-05
    相关资源
    最近更新 更多