如何通过订阅为整个应用程序加载 firestore 请求

How to load for the whole app a firestore request with a subscribe

我正在使用 angular 和 firestore 开发一个应用程序,它需要从文档中为整个应用程序实时加载所有数据。

也就是说,当我到达主页时,我需要这些数据,在相同的个人资料中,等等......大约 7、8 页。

我的这段代码运行良好:

在服务中:

getMyUser() {
 this.usersCollection.doc<User>(this.authentificationService.getUid()).valueChanges().subscribe(result => 
 {
   return result;
 });
}

在组件中:

this.userData = this.usersService.getMyUser();

但是,每次我进入不同的页面时都会发出请求。如果我浏览 8 个需要此数据的页面,它将发出 8 个请求。我想找到一个解决方案,只用服务中的实时数据发出一次请求,然后在我的 8 个不同页面中显示数据。

有解决办法吗?

感谢您的帮助。

shareReplay 应该适用于您提到的用例。你可以关注this guide,我也会留下一个简单的例子。

import { Observable } from 'rxjs/Observable';
import { shareReplay, map } from 'rxjs/operators';

const CACHE_SIZE = <SIZE_FOR_YOUR_CACHE>;

////////
your additional code

//////////

private cache$: Observable<Array<User>>;

getMyUser() {
   if (!this.cache$) {
      this.cache$ = this.requestMyUser().pipe(
        shareReplay(CACHE_SIZE)
      );
   }
   return this.cache$; 
}

requestMyUser(){
   this.usersCollection.doc<User> 
   (this.authentificationService.getUid()).valueChanges().subscribe(result => 
      {
         return result;
   });
}

/////
Rest of your code

/////

在服务中设置一个变量等于 getUser 调用的结果,然后从服务中获取变量而不是调用 getUser。