数据未及时保存在实时数据库 Firebase 上

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

我正在编写我的注册功能,当我注册成功时,它将返回到页面菜单(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.');
    }
  });
}
javascript asynchronous firebase-realtime-database
1个回答
0
投票

不要将 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 !');
}
© www.soinside.com 2019 - 2024. All rights reserved.