正确传递异步错误的方法

时间:2018-04-08 20:17:34

标签: javascript reactjs firebase firebase-authentication

我有一个使用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 });
  });
};

然而,当发生错误时,在控制台中我得到: enter image description here

我的问题是:为什么这仍然说'未捕获'? .catch()中的handleSave不会照顾到这一点吗?

更新

Link to relevant Firebase docs

2 个答案:

答案 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";
};