我正在编写我的注册功能,当我注册成功时,它将返回到页面菜单(index.html)。我使用 firebase 来存储我的数据。但我有一个问题,当它返回index.html时,数据仅存储在身份验证段中,而不存储在实时数据库中。我认为这是因为它还没有转移。然后它执行返回上一页的命令。我研究过应该使用异步,但是当我添加它时它仍然是一样的。
我尝试过使用 aysnc 但不知道出了什么问题
async function register() {
full_name = document.getElementById('full_name').value;
email = document.getElementById('email').value;
password = document.getElementById('password').value;
confirm_password = document.getElementById('confirm_password').value;
phone_number = document.getElementById('phone_number').value;
if (password != confirm_password) {
alert('difference password');
return;
}
if (valid_name(full_name) == false) {
alert('invalid name');
return;
}
if (valid_email(email) == false || valid_password(password) == false) {
alert('Email or Password is not valid');
return;
}
auth.createUserWithEmailAndPassword(email, password).then(function () {
var user = auth.currentUser;
var database_ref = database.ref();
var userID = phone_number;
var user_data = {
full_name: full_name,
phone_number: phone_number,
email: email,
};
database_ref.child('Register/' + userID).set(user_data);
alert('user created !');
});
}
function checkLoginStatus() {
firebase.auth().onAuthStateChanged(async function (user) {
if (user) {
console.log('User is signed in.');
await register();
window.location.href = 'index.html';
} else {
console.log('No user is signed in.');
}
});
}
不要将 async/await 与
.then()
混合使用,它只会导致代码混乱。
您无需等待
auth.createUserWithEmailAndPassword()
或 set()
完成即可开始导航。
仅使用
await
来简化您的代码
async function register() {
full_name = document.getElementById('full_name').value;
email = document.getElementById('email').value;
password = document.getElementById('password').value;
confirm_password = document.getElementById('confirm_password').value;
phone_number = document.getElementById('phone_number').value;
if (password != confirm_password) {
alert('difference password');
return;
}
if (valid_name(full_name) == false) {
alert('invalid name');
return;
}
if (valid_email(email) == false || valid_password(password) == false) {
alert('Email or Password is not valid');
return;
}
const { user } = await auth.createUserWithEmailAndPassword(email, password);
var userID = phone_number;
var user_data = {
full_name: full_name,
phone_number: phone_number,
email: email,
};
await database
.ref()
.child('Register/' + userID)
.set(user_data);
//alert('user created !');
}