我有一个使用Firebase身份验证来更新用户电子邮件的功能:
export const updateEmail = async (email) => {
const user = auth.currentUser;
return user.updateEmail(email);
};
它用于从表单(在React中)获取电子邮件并尝试更新电子邮件的函数。如果出现错误,我们会更改状态以反映出来。
handleSave = (e) => {
const email = e.target.email.value;
updateEmail(email).catch((err) => {
this.setState({ didError: true, emailError: err.message });
});
};
我的问题是:为什么这仍然说'未捕获'? .catch()
中的handleSave
不会照顾到这一点吗?
答案 0 :(得分:2)
假设updateEmail返回一个prmise,我想你可以尝试:
export const updateEmail = (email) => { // no need for async here
const user = auth.currentUser;
return user.updateEmail(email);
};
handleSave = async (e) => {
const email = e.target.email.value;
try{
await updateEmail(email);
}catch(err){
this.setState({ didError: true, emailError: err.message });
}
};
答案 1 :(得分:1)
我不太确定,因为我对Firebase了解不多,请允许我提出建议。
export const updateEmail = async (email) => {
const user = auth.currentUser;
const response = await user.updateEmail(email);
if ( response.error ) {
throw new Error( response.error );
}
return "something else";
};