Switchmap продолжает иметь TypeError - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь создать Observable, который возвращает UserEntity из обещания входа в Firestore.Я продолжаю получать это сообщение:

ОШИБКА TypeError: Вы указали недопустимый объект, где ожидался поток.Вы можете предоставить Observable, Promise, Array или Iterable.

this.userRepository.getOne (res.user.uid) работает правильно (тестируется отдельно).

Может кто-нибудь объяснить мне, что происходит?

loginObservable(email: string, password: string): Observable<UserEntity> {
return fromPromise(this.afAuth.auth.signInWithEmailAndPassword(email, password))
  .pipe(
    tap(val => console.log(`1 BEFORE MAP: ${val.user.uid}`)),
    catchError(e => {
      console.log("error : " + e.toString());
      throw(e);
    }),
    switchMap(res => {
      console.log(`1 BEFORE MAP: ${res.user.uid}`);
      return this.userRepository.getOne(res.user.uid);
    }),
    catchError(e => {
      console.log("error : " + e.toString());
      throw(e);
    }),
    tap(val => console.log(`2 AFTER MAP: ${val}`))
  );
}

getOne возвращает наблюдаемое и работает нормально.

getOne(id: string): Observable<UserEntity> {
  return this.getCollection()
   .doc<UserEntity>(id)
   .get()
   .pipe(
    tap(val => console.log(`BEFORE MAP: ${val}`)),
    map(res => UserEntityAdapter.from(res.id, res.data())),
    tap(val => console.log(`after MAP: ${val}`)),
   );
}

код адаптера:

export class UserEntityAdapter {
 static from(id: string, snapshot: any): UserEntity {
  return {
   id,
   name: snapshot.name,
   firstName: snapshot.firstName,
   phoneNumber: snapshot.phoneNumber,
   gender: snapshot.gender,
   urlPhotoPublic: snapshot.urlPhotoPublic,
 };
}
}

1 Ответ

0 голосов
/ 15 апреля 2019

Как следует из сообщения об ошибке, вы предоставили switchMap методом, который не имеет возвращаемого типа Observable, Promise, Array или Iterable. Из-за этого вам нужно изменить свой 'switchMap' на 'map' или вернуть Observable, Promise, Array или Iterable из метода 'getOne ()'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...