FirebaseError: [code=invalid-argument]: запрос функции.where() требует действительного третьего аргумента, но он не определен

#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 -> получить коллекцию фотографий