【发布时间】:2020-05-04 13:20:39
【问题描述】:
在我的 Angular 应用程序中,当我尝试编译时出现此错误:
类型
'Observable<Promise<void>>'不可分配给类型'Observable<AuthResponseData>'。类型“承诺”缺少 来自“AuthResponseData”类型的以下属性:种类、idToken、 电子邮件、refreshToken 和另外 2 个
这里是AuthResponseData接口:
export interface AuthResponseData {
kind: string;
idToken: string;
email: string;
refreshToken: string;
localId: string;
expiresIn: string;
registered?: boolean;
}
这里是 login() 方法:
login() {
let authObs: Observable<AuthResponseData>;
authObs = this.authService.login(this.email, this.password);
authObs.subscribe(
resData => {
console.log('Response Data:', resData);
this.router.navigateByUrl('/home');
},
errRes => {
console.log('Error Response:', errRes);
});
}
这里是AuthService.login():
login(email: string, password: string) {
return of(firebase.auth().signInWithEmailAndPassword(email, password)
.then((user) => {
console.log('Service User Value', user);
}).catch((err) => {
console.log('Service Error', err);
}));
}
谁能告诉我我需要做哪些更改才能在 Observable 中分配正确的类型?
【问题讨论】:
-
这里的第一个答案是指向正确的方向。您正在返回一个 void 类型的承诺的可观察对象,这意味着这一行 -->
return of(firebase.auth().signInWithEmailAndPassword(email, password)不要做所有的事情并捕获错误内容并将您的承诺firebase.auth().signInWithEmailAndPassword(email, password)转换为使用 from 而不是“of”关键字的可观察对象。然后正确订阅。我强烈推荐使用像 catchError 这样的管道操作符。
标签: angular typescript google-cloud-firestore