Tom*_*Tom 2 subject reactive-programming observable rxjs angular
我有一个从 FirebaseAuthService获取Observable<auth>数据并将其放入公共变量中的方法auth$。
在我的应用程序中的某个位置,我需要多个组件来访问该auth$值以检查其内容。
我目前只是this.authService.auth$.subscribe(auth => this.auth = auth)在组件中做。
这是否意味着我要执行fetch data from Firebase多次?
如果是,我应该将 auth$ 定义为Subject/BehaviorSubject,订阅服务并使用 推送数据吗.next?
默认情况下,可观察对象未启用多播。这意味着多个订阅将生成自己的流。由于您不想为每个订阅重新获取身份验证凭据,因此您需要使原始流与多播兼容。这是使用例如share()运算符来完成的,该运算符将使流在第一个订阅时变得热,并在内部存储所有后续订阅的引用计数。
由于当流变热时,迟到的订阅不会自动获取之前发出的值,因此我们需要构建重放发出值的功能。
这两个要求都结合在shareReplay()运算符中,使您可以多播最新的n值。
所以你的代码看起来像这样:
const authStream = this.authService.auth$.shareReplay(1);
// component 1
const myAuthDisposable = authStream.subscribe(auth => this.auth = auth)
// component 2
const myAuthDisposable = authStream.subscribe(auth => this.auth = auth)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
918 次 |
| 最近记录: |