Javascript 已显示承诺错误消息,但未捕获错误
我正在尝试使用helpers.js导出的helper函数注册用户并将其添加到React应用程序内的Firebase集合。使用有效数据时一切正常,但当我尝试在没有数据或无效数据的情况下注册时,会显示错误,但我仍然无法在控制台中完成 图片: 辅助函数Javascript 已显示承诺错误消息,但未捕获错误,javascript,reactjs,firebase,promise,Javascript,Reactjs,Firebase,Promise,我正在尝试使用helpers.js导出的helper函数注册用户并将其添加到React应用程序内的Firebase集合。使用有效数据时一切正常,但当我尝试在没有数据或无效数据的情况下注册时,会显示错误,但我仍然无法在控制台中完成 图片: 辅助函数 const signUp = async(email, password) => { await firebase.auth().createUserWithEmailAndPassword(email, password) .
const signUp = async(email, password) => {
await firebase.auth().createUserWithEmailAndPassword(email, password)
.then(res => {
const db = firebase.firestore();
db.collection('users').doc(res.user.uid).set({
email: res.user.email,
emailVerified: res.user.emailVerified,
displayName: res.user.displayName,
phoneNumber: res.user.phoneNumber,
photoUrl: res.user.photoURL,
firstName: '',
lastName: ''
});
})
};
反应组分函数
const handleSubmit = (e) => {
e.preventDefault();
setLoader(true);
const {email, password} = e.target.elements;
signUp(email.value, password.value).then(() => {
setLoader(false);
history.push('/dashboard');
}).catch(err => {
console.log(err);
setError(err.message);
setLoader(false);
});
};
我想你应该回报我的承诺
const signUp =(email, password) => {
return firebase.auth().createUserWithEmailAndPassword(email, password)
.then(res => {
const db = firebase.firestore();
db.collection('users').doc(res.user.uid).set({
email: res.user.email,
emailVerified: res.user.emailVerified,
displayName: res.user.displayName,
phoneNumber: res.user.phoneNumber,
photoUrl: res.user.photoURL,
firstName: '',
lastName: ''
});
})
};
转换这个
await firebase.auth().createUserWithEmailAndPassword(email, password)
.then(res => {
const db = firebase.firestore();
return db.collection('users').doc(res.user.uid).set({
email: res.user.email,
emailVerified: res.user.emailVerified,
displayName: res.user.displayName,
phoneNumber: res.user.phoneNumber,
photoUrl: res.user.photoURL,
firstName: '',
lastName: ''
});
})
到
现在,您可以找到正确的错误并更正它。我认为您在异步函数中缺少catch语句并返回firebase函数的结果,如果发生任何情况,处理firebase操作中的错误也很方便:
const signUp = async(email, password) => {
try {
let result = await firebase.auth().createUserWithEmailAndPassword(email, password)
.then(res => {
const db = firebase.firestore();
db.collection('users').doc(res.user.uid).set({
email: res.user.email,
emailVerified: res.user.emailVerified,
displayName: res.user.displayName,
phoneNumber: res.user.phoneNumber,
photoUrl: res.user.photoURL,
firstName: '',
lastName: ''
})
.catch(error){
return error
}
})
return result
}
catch ( error ){
// Handle your error here
return error
}
};
在异步函数中使用try/catch进行尝试。为什么要等待和。然后呢?您应该执行const res=wait firebase.auth.createuserwithemail和passwordemail,password;然后在。然后回调中完成你的工作。有一种可能性,在firebase代码的某个地方,他们在返回一个承诺时搞砸了,创建了两个承诺,一个是他们返回给你,另一个是挂起的。我以前做过这件事。这将导致未捕获的错误,但这不是您能够修复的。@TkoL我不确定是否是这种情况,因为如果用注册代码替换handleSubmit代码并在最后添加catch,我就不会再未捕获了……删除async完全解决了问题。谢谢大家。@AziralKMG如果有帮助,请注明答案,谢谢
const signUp = async(email, password) => {
try {
let result = await firebase.auth().createUserWithEmailAndPassword(email, password)
.then(res => {
const db = firebase.firestore();
db.collection('users').doc(res.user.uid).set({
email: res.user.email,
emailVerified: res.user.emailVerified,
displayName: res.user.displayName,
phoneNumber: res.user.phoneNumber,
photoUrl: res.user.photoURL,
firstName: '',
lastName: ''
})
.catch(error){
return error
}
})
return result
}
catch ( error ){
// Handle your error here
return error
}
};