我正在尝试创建一个从Firestore登录Promise返回UserEntity的Observable。 我一直收到此消息:
错误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,
};
}
}
答案 0 :(得分:0)
根据错误消息的建议,您为'switchMap'提供了一种没有返回类型为Observable,Promise,Array或Iterable的方法。因此,您需要将“ switchMap”更改为“ map”,或者从“ getOne()”方法返回Observable,Promise,Array或Iterable。