AngularFire-订阅前等待查询

时间:2020-04-21 12:00:34

标签: javascript google-cloud-firestore angularfire2

我有一个执行查询的服务。该查询是从需要查询运行的任何组件触发的。但是,我想用查询结果填充组件内的数组。 (我完全知道您可以将| async与angularfire一起使用,但是某些规范要求我有一个数组)

在下面的示例中,该组件检查以确保用户已登录以获得用户ID,然后调用服务以执行查询。

此后,我订阅了可观察的相册,以便有效地更新我的阵列。

即使以下方法可行,但不确定是否已运行查询来调用this.subscribeToList();还是不合适的。

更新queryAlbums函数以确保仅在有效执行this.subscribeToList();之后才调用this.albumsService.queryAlbumsList(user.uid);的最佳方法是什么?

Component.ts

async queryAlbums() {
  const user = await this.authService.isLoggedIn()
  if (user) {
    this.albumsService.queryAlbumsList(user.uid);
    this.subscribeToList();
  }
}

subscribeToList(){
  this._subscription = this.albumsService.albums.subscribe(v => {
    this.myArray = v;
    console.log(v);
  });
}

Service.ts

queryAlbumsList(user_id: string) {
    this.albumsCollection = this.afs.collection<any>(`albums`, ref => ref.where("users", "array-contains", user_id))
    this.albums = this.albumsCollection.valueChanges({ idField: 'id'}).pipe(shareReplay())
}

0 个答案:

没有答案