最近我一直在调试我的Angular代码,我在其中分发了几个对我服务的各种公共函数的订阅,我看到当从服务内部和外部调用这些函数时,调试器返回执行我在每个订阅声明中的所有代码。
到目前为止,我认为这段代码只执行了一次(第一个),然后它保留在内存中,例如由事件.next()调用。
这是否意味着将所有.subscribe()指令集中在单个"注册表函数"那只执行一次?
我的订阅的无限副本是在我不知情的情况下在内存中创建的吗?
我不想回答"取决于订阅者的类型"因为我不认为作为程序员我们应该知道我们使用的每个外部资源的实现......我总是找到最安全,最健壮的方法。
提前致谢。
答案 0 :(得分:0)
对您的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);