Firebase承诺未实现- MERN应用程序



我几乎完全按照Firebase文档使用代码,但无论出于何种原因,我的异步函数无法履行承诺,并且.then()块从未触发。

代码:

const onSubmit = async () => {
setLoading(true);
// console.log("REGISTER STATE =======>", registerState);
await firebase
.auth()
.createUserWithEmailAndPassword(registerState.email, registerState.password)
.then((user) => {
console.log("REGISTER", user);
history.push("/");
})
.catch((err) => {
//console.log(err);
toast.dark(err.message, {
position: "top-center",
autoClose: 5000,
hideProgressBar: false,
closeOnClick: true,
pauseOnHover: true,
draggable: true,
progress: undefined,
});
setLoading(false);
});
};

我也试过这个,因为也许我不应该使用。then和一个承诺:


const onSubmit = async () => {
setLoading(true);
console.log("REGISTER STATE =======> ", registerState.email);
try {
console.log("starting the try catch")
const user = await firebase.auth().createUserWithEmailAndPassword(registerState.email, registerState.password)
console.log("REGISTER USER =======> ", user);
history.push("/login");
} catch (err) {
console.log("REGISTER REQUEST ERROR =======> ", err);
toast.dark(err.message, {
position: "top-center",
autoClose: 5000,
hideProgressBar: false,
closeOnClick: true,
pauseOnHover: true,
draggable: true,
progress: undefined,
});
setLoading(false);
}
}

在第一种情况下,当我看到在Firebase中创建的用户时,会触发await,但是.then()不会触发,因为用户从未登录到控制台。

在第二种情况下,用户只在提交两次表单时才在firebase中创建(奇怪),并且仍然没有从firebase返回用户对象(即没有记录到控制台)。

在这两种情况下,控制台、终端或.catch中都没有显示错误(它可以工作-例如,如果我尝试使用3个字符的密码,我得到的错误响应是密码需要>= 6个字符)

解决方案是包含一个preventDefault子句,以防将来有人偶然发现同样的问题!

最新更新