Firebase。我必须点击两次 "继续 "按钮才能做任何事情。

问题描述 投票:0回答:1

这是我创建用户并尝试引用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 语句在点击监听器里面,但是用户是在第一次点击时创建的。

这里发生了什么?

javascript firebase
1个回答
0
投票

返回承诺的API是异步的,立即返回。 执行移动到承诺后面的代码,而的。thencatch 回调将在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);
      });
    }
© www.soinside.com 2019 - 2024. All rights reserved.