У меня есть служба, которая выполняет запрос. Этот запрос запускается из любого компонента, который требует выполнения запроса. Однако я хотел бы заполнить массив в компоненте результатами запроса. (Я полностью осознаю, что вы можете использовать | 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())
}