Единственный способ получить данные из коллекции FireStore - это подписка; однако вы можете управлять потоком данных до подписки с помощью команд RXJS.
Примером этого является:
В этом примере this.afs ссылается на мой AngularFireStore, затем я собираю информацию о конкретном пользователе. Затем я запускаю функцию snapshotChanges (), предоставляемую FirebaseStore.
Теперь, чтобы получить конкретные данные, которые вы ищете, вы хотите запустить все RXJS 6 с .pipe. Думайте об этом как о Марио в туннеле. Вы начинаете с трубы в первую очередь.
Теперь вы хотите использовать оператор MAP, чтобы изменить то, что вы хотите. В этом случае я хочу отобразить, а затем получить полезную нагрузку.
Теперь вы можете запустить функцию .data (), чтобы вернуть все ваши данные; Тем не менее, я запускаю данные .get, потому что я хочу вернуть только определенные данные.
Как только вы определились с тем, что вам нужно, вы можете подписаться, что вернет то, что вы указали в трубе.
loadUser(user) {
this.afs.doc<any>(`users/${user}`).snapshotChanges().pipe(
map(actions => {
console.log('Getting image reference from user');
const imageRef = actions.payload.get('appPhotoRef');
console.log(imageRef);
return imageRef;
})
).subscribe((data) => {
console.log('Getting download URL');
console.log(data);
return this.getDownloadURL(data);
});
}