Появляется сообщение об ошибке Promise, но ошибка не обнаружена - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь использовать вспомогательную функцию, экспортированную из helpers.js в signUp пользователя и добавить ее в коллекцию Firebase в приложении React.Все работает нормально с действительными данными, но когда я пытаюсь зарегистрироваться без (или недействительных) данных, отображается ошибка, но я все еще получаю Uncaught в консоли.

image: https://i.imgur.com/4ux1pOz.jpg

Вспомогательная функция

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

Ответы [ 3 ]

1 голос
/ 20 сентября 2019

Я думаю, вы должны вернуть обещание

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: ''
        });
    })
};
0 голосов
/ 20 сентября 2019

Я думаю, что вы пропустили свой оператор 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
   }
};
0 голосов
/ 20 сентября 2019

конвертируйте

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: ''
        });
    })

в

try {
   let res = await firebase.auth().createUserWithEmailAndPassword(email, password);
   const db = firebase.firestore();
   let created = 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: ''
    });

    if (created)
        return true;
    else 
        return false;
}
catch (error) {
    console.log(error);
    return Promise.reject(error);
}

Теперь вы можете найти правильную ошибку и исправить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...