Последовательность действий после нажатия кнопки отправки - PullRequest
0 голосов
/ 02 октября 2018

У меня есть кнопка, связанная с resetPasswordHandler - после чего после ввода электронного адреса пользователя и успешного выполнения запроса появится всплывающее предупреждение с просьбой проверить электронную почту пользователя, затем модальное закрытие и состояниеиз модального сброса.

Я думал, что это (см. код ниже) будет работать.Но когда я нажимаю кнопку отправки, модальное окно сбрасывается и закрывается до появления всплывающего окна.

Я не могу точно сказать, где я ошибся.

    resetPasswordHandler = () => {
    console.log("Resetting Password")
    firebase.auth().sendPasswordResetEmail(this.state.controls.email.value).then(
        alert("Please Check Your Email")
    ).then(
        this.reset()
    ).then(
        this.refs.resetPasswordModal.close()
    ).catch(function(e){
        alert(e);
    })
};

1 Ответ

0 голосов
/ 02 октября 2018

При вызове .then(...) на Promise вы должны передать функцию (например, аналогично передаче функции в обработчик нажатия кнопки).

myPromise
  .then(() => this.props.dispatch(someAction()))

Прямо сейчас вы звонитефункция вместо передачи.

Ваш код должен выглядеть следующим образом, помня об этом:

firebase.auth().sendPasswordResetEmail(this.state.controls.email.value)
  .then(
    () => alert("Please Check Your Email")
  )
  .then(
    () => this.reset()
  )
  .then(
    () => this.refs.resetPasswordModal.close()
  )
  .catch(function(e){
    alert(e);
  })

(я использовал функции стрелок в моем примере, вы также можете использовать function-синтаксис, конечно)

Вы правильно сделали это в .catch, но, похоже, пропустили его в других вызовах!

Вы также можете использовать async awaitсинтаксис, который дает вашему коду более синхронный вид:

resetPasswordHandler = async () => {
  try {
    // Notice the "await" before calling the reset function, which returns a promise.
    await firebase
      .auth()
      .sendPasswordResetEmail(this.state.controls.email.value)

    alert("Please Check Your Email")

    this.reset()

    this.refs.resetPasswordModal.close()
  }
  catch(e) {
    alert(e);
  }
};

Если ваша функция переноса имеет ключевое слово async, вы можете разрешать обещания более синхронно, вызывая их с помощью await.Затем функция обертывания возвращает само обещание, которое разрешается после завершения его тела.

...