Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 已显示承诺错误消息,但未捕获错误_Javascript_Reactjs_Firebase_Promise - Fatal编程技术网

Javascript 已显示承诺错误消息,但未捕获错误

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) .

我正在尝试使用helpers.js导出的helper函数注册用户并将其添加到React应用程序内的Firebase集合。使用有效数据时一切正常,但当我尝试在没有数据或无效数据的情况下注册时,会显示错误,但我仍然无法在控制台中完成

图片:

辅助函数

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
   }
};