在React中,为什么我在承诺周围得到这些错误?



我正在将Firebase集成到我的React应用程序中,并使用TypeScript。Firebase是从firebase.js导入的,它是:

class Firebase {
constructor() {
app.initializeApp(config);
}
doEmailUpdate = (email:string) => {
if (app.auth().currentUser) {
return app.auth().currentUser?.updateEmail(email)
}
return Promise.reject();
}
... more functions ...
}

export default Firebase;

第一个问题:Firebase函数updateEmail返回Promise<void>,而doEmailUpdate的返回类型(在VSCode中按CTRL获得)是Promise<void>|undefined。为什么undefined是一个选项?当然Promise.reject()也会返回一个承诺吗?我的结构正确吗?

第二:从我的组件调用这个函数然后处理错误的最好方法是什么?我一直在使用:
firebase.doEmailUpdate(formState.email)
.then(() => {...})
.catch(error => {...})
但是我得到一个TypeScript错误

对象可能'未定义'

可能是因为函数可以返回undefined。

我做错了什么?我如何确保updateEmail总是返回一个承诺,或一些可以适合然后/捕获结构?

这里的罪魁祸首是可选的链接操作符(?.)。如果currentUsernullundefined,那么你的代码将返回undefined(这就是运算符所做的)。

在这种情况下根本不需要它,你可以这样做:

let user = app.auth().currentUser;
if (user) {
return user.updateEmail(email)
}

最新更新