【问题标题】:Angular/RxJS: Should I put all my Subscriptions in a unique function or method of my Service?Angular/RxJS:我应该把我所有的订阅放在我的服务的一个独特的函数或方法中吗?
【发布时间】:2023-03-18 17:35:02
【问题描述】:

最近我一直在调试我的 Angular 代码,我在其中分发了对我的服务的各种公共函数的多个订阅,并且我看到当从服务内部和外部调用这些函数时,调试器返回执行我在每个订阅声明中的所有代码。

到目前为止,我认为这段代码只执行了一次(第一个),然后它保留在内存中以供事件 .next() 调用。

这是否意味着将我的所有 .subscribe() 指令集中在一个只执行一次的“注册表函数”上是合乎逻辑的?

是否在我不知情的情况下在内存中创建了我的订阅的无限副本?

我不想要“取决于订阅者的类型”的答案,因为我认为作为程序员,我们不应该知道我们使用的每个外部资源的实现......我正在寻找最安全和稳健的方式一直在做。

提前致谢。

【问题讨论】:

    标签: javascript angular rxjs observable subscribe


    【解决方案1】:

    每个对 observable 的订阅都会创建自己的执行上下文。

    // one execution context created    
    yourObservable.subscribe(x=>{})
    
    
    // another execution context created
    yourObservable.subscribe(x=>{})
    

    如果您不希望每个订阅的每个执行上下文,您需要share()

    yourSharedObservable = yourObservable.share();
    
    //only one execution context
    yourSharedObservable.subscribe(x=>{})
    yourSharedObservable.subscribe(x=>{})
    

    如果您希望yourSharedObservable 缓存数据并在所有订阅者之间共享,您可以shareReplay()

    yourSharedAndCachedObservable = yourObservable.shareReplay(1);
    

    【讨论】:

      猜你喜欢
      • 2011-04-14
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2016-05-13
      相关资源
      最近更新 更多