#javascript #angular #firebase #google-cloud-firestore #firebase-authentication
#javascript #угловой #firebase #google-cloud-firestore #firebase-аутентификация
Вопрос:
Мне нужно запросить некоторые данные на основе uid текущего пользователя, вошедшего в систему. У меня есть служба аутентификации с пользователем $ observable:
this.user$ = this.afAuth.authState.pipe(
switchMap(user => {
// logged in
if (user){
return this.afs.doc<User>(`users/${user.uid}`).valueChanges();
}
// logged out
else {
return of(null)
}
})
Затем у меня есть служба фотографий, которая запрашивает данные, используя uid от пользователя $ observable:
photos: Observable<Photo[]>;
uid;
constructor(public afs: AngularFirestore, private auth:AuthService) {
this.auth.user$.subscribe(user => this.uid = user.uid);
this.photos = this.afs.collection('photos',
ref => ref.where('uid','==',this.uid).orderBy('createdAt','asc')).valueChanges();
}
getPhotos(){
return this.photos;
}
Наконец, у меня есть компонент, который подписывается на фотографии, доступные для просмотра из службы фотографий:
ngOnInit(){
this.photoservice.getPhotos().subscribe(photos => this.photos = photos);
}
Когда я запускаю код, я получаю ошибку: FirebaseError: запрос функции.где() требует действительного третьего аргумента, но он не определен.Я думаю, это потому, что запрос выполняется до того, как я смогу получить uid. Как я могу получить uid перед выполнением запроса?
Комментарии:
1. Я думаю, что вопрос на самом деле заключается в том, как вы можете отложить запрос до тех пор, пока uid не станет доступен из Firebase Auth state observer.
2. Я предлагаю включить вашу логику маршрутизации, как упоминал Doug, похоже, вы пытаетесь получить недопустимое значение uid . Исправление логики вашего приложения должно исправить это, поэтому попробуйте следующее: Login -> Redirect / Reroute -> получить коллекцию фотографий