Firebase: мне нужно дважды нажать кнопку "Продолжить", чтобы что-то сделать - PullRequest
0 голосов
/ 27 мая 2020

Вот мой код для создания пользователя и попытки ссылаться на displayName:

if(m1 && m2 && m3 && m4 && m5 && m6 && m7) {
    firebase.auth().createUserWithEmailAndPassword(email, password)
      .then(function () {
        user = firebase.auth().currentUser;
        user.sendEmailVerification();
      })
      .then(function () {
        user.updateProfile({
          displayName: firstname + ' ' + lastname,
        });
      })
      .catch(function(error) {
        var errorCode = error.code;
        var errorMessage = error.message;
        console.log(errorCode);
        console.log(errorMessage);
      });
      var name;
      var uemail;
      name = user.displayName;
      uemail = user.email;
      alert('Email verification code was sent to ' + uemail + ', ' + name);   
    }

Основной оператор if здесь просто проверяет, что все поля заполнены правильно.

Я получаю эту ошибку : user is not defined at name = user.displayName.

Кроме того, мне нужно дважды или трижды нажать кнопку «Продолжить», прежде чем появится alert. Этот оператор if находится внутри прослушивателя кликов, однако пользователь создается при первом клике.

Что здесь происходит?

1 Ответ

0 голосов
/ 27 мая 2020

API, возвращающие обещание, являются асинхронными и возвращаются немедленно. Выполнение переходит к коду, следующему за обещанием, и обратные вызовы then и catch будут вызваны некоторое время спустя, после завершения API.

user имеет значение только после завершения createUserWithEmailAndPassword, и вызывается обратный вызов then. Вам нужно будет убедиться, что ваш код не использует его, пока это не произойдет. Попробуйте переместить код, который использует user, в обратные вызовы.

      firebase.auth().createUserWithEmailAndPassword(email, password)
      .then(function () {
        user = firebase.auth().currentUser;
        user.sendEmailVerification();
      })
      .then(function () {
        user.updateProfile({
          displayName: firstname + ' ' + lastname,
        });

        // Move the code up here where `user` definitely has a value
        var name;
        var uemail;
        name = firstname + ' ' + lastname;
        uemail = user.email;
        alert('Email verification code was sent to ' + uemail + ', ' + name);   


      })
      .catch(function(error) {
        var errorCode = error.code;
        var errorMessage = error.message;
        console.log(errorCode);
        console.log(errorMessage);
      });
    }
...