这是我创建用户并尝试引用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
语句在点击监听器里面,但是用户是在第一次点击时创建的。
这里发生了什么?
返回承诺的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);
});
}