Не могу обрабатывать данные документа, как я хочу в Angularfire2 - PullRequest
0 голосов
/ 16 октября 2018

У меня есть коллекция под названием 'users' с некоторыми фиктивными данными, такими как:

uid: {
  admin: false,
  uid: 'longhash',
  displayName: 'User Name',
  email: 'user@email.com'
}

У меня проблемы с обработкой, извлечением и возвратом данных 'admin' из документа, асинхронно.

Мой код:

  isAdmin:Observable<boolean> = this.uid.pipe(
switchMap(uid => {
  if(!uid){
    return observableOf(false);
  } else {

    let user = new BehaviorSubject<string>(uid);

    return user.pipe(
      switchMap(page =>
        this.afs.collection<User>('users', ref => ref.where('uid', '==', uid)).snapshotChanges().pipe(
          map(changes => {
            return changes.map(userData => {
              const cUser = userData.payload.doc.data() as User;
              return cUser ? cUser.admin : false;
            });
          })
        )
      )
    );
  }
})
);

Это ошибка, которую показывает моя IDE: ide error return

Кто-нибудь знает, что я делаюздесь не так?

1 Ответ

0 голосов
/ 16 октября 2018

В вашем операторе switchMap вы возвращаете наблюдаемую, генерирующую логическое значение, или наблюдаемую, генерирующую массив логического значения, которая не соответствует объявлению типа константы isAdmin const isAdmin:Observable<boolean>.Попробуйте что-то вроде этого: isAdmin: Observable<boolean> | Observable<boolean[]>, это должно исправить ошибку типа.

Если ваша цель - вернуть логическое значение, а не массив логических значений, при условии, что в вашей пользовательской коллекции только один документ, содержащий ваш uid, попробуйте следующее:

isAdmin:Observable<boolean> = this.uid.pipe(
switchMap(uid => {
  if(!uid){
    return of(false);
  } else {

    return of(uid).pipe(
      switchMap(page =>
        this.afs.collection<User>('users', ref => ref.where('uid', '==', uid).limit(1)).snapshotChanges().pipe(
          map(changes => {
            return changes.map(userData => {
              const cUser = userData.payload.doc.data() as User;
              return cUser ? !!cUser.admin : false;
            })[0];
          })
        )
      )
    );
  }
})
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...