Firebase Auth выдает мне ошибку при попытке разрешить обещание

#javascript #reactjs #firebase-authentication #runtime-error

#javascript #reactjs #firebase-аутентификация #ошибка во время выполнения

Вопрос:

Мне нужна помощь с этой функцией аутентификации Google… У меня есть метод doCreateUserWithEmail и пароль в firebase.js (Реакция), которая выглядит следующим образом.

 doCreateUserWithEmailAndPassword = (email, password) => {
 this.auth
  .createUserWithEmailAndPassword(email, password)
  .then(response => console.log(response))
  .catch(err => console.log(err));};
  

Когда я беру then .затем и ниже и и прикрепите это к signUp.js вот так…

 onSubmitHandler = event => {
event.preventDefault();
const { email, passwordOne } = this.state;
this.props.firebase.doCreateUserWithEmailAndPassword(email, passwordOne)
  .then(response => console.log(response))
  .catch(err => console.log(err));
this.props.history.push(ROUTES.HOME);
  

};

Я получаю эту ошибку..

 TypeError: Cannot read property 'then' of undefined
SignUpFormBase._this.onSubmitHandler
src/components/signUp/signUp.js:31
 28 | onSubmitHandler = event => {
 29 |   event.preventDefault();
 30 |   const { email, passwordOne } = this.state;
 > 31 |   this.props.firebase.doCreateUserWithEmailAndPassword(email, 
 passwordOne)
 | ^  32 |     .then(response => console.log(response))
 33 |     .catch(err => console.log(err));
 34 |   this.props.history.push(ROUTES.HOME);
 View compiled
  

и да, я удалил его из doCreateUserWithEmailAndPassword, когда я получаю ошибку..
но функция успешно регистрирует пользователя в Firebase, и если я удалю .тогда и .catch работает нормально.

Почему я получаю эту ошибку?

Ответ №1:

Вы ничего не возвращаете из, doCreateUserWithEmailAndPassword поэтому оно возвращается undefined , и вызов .then() on undefined вызывает ошибку, которую вы видите.

Просто верните Promise from doCreateUserWithEmailAndPassword , и это должно это исправить:

 doCreateUserWithEmailAndPassword = (email, password) => {
  return this.auth
    .createUserWithEmailAndPassword(email, password)
    .then(response => console.log(response))
    .catch(err => console.log(err));
};