Firebase实时数据库快照未返回正确或错误

时间:2019-04-16 18:04:23

标签: javascript html firebase firebase-realtime-database

我正在使用的快照函数不会给我一个值,该值将不会执行代码。

数据库全部链接在一起,并删除了if语句和快照检查写入数据库的操作。但是,我希望它能正常工作,因为我不想重置用户变量,因此需要检查它是否已经存在。

function createUserData(){
    var ref = firebase.database().ref("users/" + uid);
ref.once("value")
  .then(function(snapshot) {
        userExistCheck = snapshot.exists();
    });

    if (userExistCheck == false){
        displayName = document.getElementById("name-input").value;
        firebase.database().ref('users/' + uid).set({
        username: displayName,
        email: email,
        module1: false,
        module2: false,
        module3: false,
        module4: false,
        module5: false,
        module6: false
      });
        window.alert("working")
    }
    else{
        window.alert(uid);
    }
}

如果该用户不存在,则应添加该用户,但不添加。根本没有输出,并且显示uid的窗口警报。

1 个答案:

答案 0 :(得分:0)

此区块

ref.once("value")
  .then(function(snapshot) {
        userExistCheck = snapshot.exists();
    });

是异步的,因此在它检索您的数据之前正在执行该操作

 if (userExistCheck == false){
        displayName = document.getElementById("name-input").value;
        firebase.database().ref('users/' + uid).set({
        username: displayName,
        email: email,
        module1: false,
        module2: false,
        module3: false,
        module4: false,
        module5: false,
        module6: false
      });
        window.alert("working")
    }
    else{
        window.alert(uid);
    }

在检查该值是否存在后将不会更新,以解决此移动代码的问题

function createUserData(){
    var ref = firebase.database().ref("users/" + uid);
ref.once("value")
  .then(function(snapshot) {
        userExistCheck = snapshot.exists();
 if (userExistCheck == false){
        displayName = document.getElementById("name-input").value;
        firebase.database().ref('users/' + uid).set({
        username: displayName,
        email: email,
        module1: false,
        module2: false,
        module3: false,
        module4: false,
        module5: false,
        module6: false
      });
        window.alert("working")
    }
    else{
        window.alert(uid);
    }
    });


}