代码之家  ›  专栏  ›  技术社区  ›  Mike Jerred

通过toObservable创建的可观察对象的订阅是否不需要takeUntilDestroyed?

  •  0
  • Mike Jerred  · 技术社区  · 11 月前
    import { Component, input } from '@angular/core';
    import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
    
    @Component({ ... })
    class MyComponent {
      value = input<string>();
    
      constructor() {
        toObservable(this.value)
          .pipe(takeUntilDestroyed()) // is this superfluous?
          .subscribe(console.log);
      }
    }
    

    文件指出 toObservable 必须在注入上下文中调用,所以我不确定它是否自动清理订阅。

    1 回复  |  直到 11 月前
        1
  •  1
  •   Matthieu Riegler    11 月前

    toObservable 实现将使用 DestroyRef 调用 complete 关于它所创造的可观察性。因此,从某种意义上说,是的,没有必要 takeUntilDestroyed() 如果 至可观测 在组件中调用。

    但是,如果 至可观测 在根目录中提供的服务中被调用, DestroyRef 永远不会开火 onDestroy 而你的可观察性将(几乎)永远不会被破坏。

    @Injectable({providedIn: 'root'})
    class MyService() {
    
     myValue = signal(5)
    
     getObservable() {
       return toObservable(this.myValue);
     }
    }
    

    这个例子很好地说明了一个不可能自动完成的可观察对象。