Я пытаюсь создать 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,
};
}
}