AngularFire - дождаться запроса перед подпиской - PullRequest
1 голос
/ 21 апреля 2020

У меня есть служба, которая выполняет запрос. Этот запрос запускается из любого компонента, который требует выполнения запроса. Однако я хотел бы заполнить массив в компоненте результатами запроса. (Я полностью осознаю, что вы можете использовать | async с angularfire, но некоторые спецификации требуют наличия массива)

В приведенном ниже примере компонент проверяет, что пользователь вошел в систему для получения идентификатор пользователя, а затем вызывает службу для выполнения запроса.

После этого я подписываюсь на наблюдаемые альбомы, так что мой массив будет эффективно обновляться.

Несмотря на то, что работает ниже, это Неправильно вызывать 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())
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...