微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Firebase .orderByChild().on 每次被调用时都会运行越来越多的次数

如何解决Firebase .orderByChild().on 每次被调用时都会运行越来越多的次数

我正在创建一个来宾列表程序,该程序将来宾列表存储在 Firebase RTDB 中,当我签入和签出人员时,我的函数运行的次数是预期的数倍。我已经向控制台发送了警报,所以我知道它运行了多少次。我有单独的签入和签出操作函数,所以可能是我调用数据库次数过多?

 //-------------------- Check In and Check In Helper Functions -------------------------

    //Helper Function to Grab current List index
    function printArray() {
  

    var ref = database.ref('guestList')
  

    ref.on('value',readData,errData);
      }
    function readData(data){
      guestList=[];
      var scores = data.val();
      var keys = Object.keys(scores)
    
      for (var i=0; i < keys.length; i++){
        var k = keys[i]
        var name = scores[k].name;
        var inside = scores[k].Inside;
        var timeIn = scores[k].TimeIn;
        var timeOut = scores[k].TimeOut;
        guestList[i] = {
            name: name,Inside: inside,TimeIn: timeIn,TimeOut: timeOut,}
      }
      checkIn(guestList);
    }
    
    function errData(err){
      console.log('Error!');
      console.log(err);
    }
    //Helper Function to set text Box to selected name
    function checkInn(name){
      console.log(name)
      document.getElementById('checkIn').value = name;
    }
    //Check in
    function checkIn(list) {

 
    //Grabs current guest to be added or deleted from form text Box
    var name = document.getElementById('checkIn').value;

    //Checks to see if user is in list of guests and isn't in the list of guest in the party
    
    var guestsRef = firebase.database().ref("guestList/");

    guestsRef.orderByChild("name").on("child_added",function(data) {
    if (name == data.val().name) {
      objIndex = list.findindex((obj => obj.name == name));
      guestsRef = firebase.database().ref("guestList/" + objIndex)
      guestsRef.update({
        Inside: "Yes",TimeIn: getTime(),})
      guestsRef.off();
      document.getElementById('checkIn').value = "";
      alerts(name,true)
    } 
  })
  }

    //------------------------- Check Out ------------------------------------------------------------
    //Helper Function to Grab current List index
    function printArrayy() {
      var ref = database.ref('guestList')
      ref.on('value',readOutData,errData);
      }
    function readOutData(data){
      guestList=[];
      var scores = data.val();
      var keys = Object.keys(scores)
    
      for (var i=0; i < keys.length; i++){
        var k = keys[i]
        var name = scores[k].name;
        var inside = scores[k].Inside;
        var timeIn = scores[k].TimeIn;
        var timeOut = scores[k].TimeOut;
        guestList[i] = {
            name: name,}
      }
      checkOut(guestList);
    }
    
    //Helper Function to set text Box to selected name
    function checkOutt(name){
      console.log(name);
      document.getElementById('checkOut').value = name;
    }
    //Check Out
    function checkOut(list) {
     
        //Grabs current guest to be added or deleted from form text Box
        var name = document.getElementById('checkOut').value;
    
        //Checks to see if user is in list of guests and isn't in the list of guest in the party
        
        var guestsRef = firebase.database().ref("guestList/");
    
        guestsRef.orderByChild("name").on("child_added",function(data) {
        if (name == data.val().name) {
          objIndex = list.findindex((obj => obj.name == name));
          guestsRef = firebase.database().ref("guestList/" + objIndex)
          guestsRef.update({
            Inside: "No",TimeOut: getTime(),})
          document.getElementById('checkOut').value = "";
          guestsRef.off();
          alerts(name,false)
        } 
      })
      }


//Placeholder to alert user when a succesful check in or check out function runs
  function alerts(name,Boolean){
    if(Boolean){
      console.log(name + " has been checked in!")
    }
    else{
      console.log(name + " has been checked out!")
    }
  }

enter image description here

这是我输出的屏幕截图。提前致谢! 编辑:忘记提及并为我过度使用辅助功能而道歉!我的 HTML 表单首先为每个函数调用 printArrayy() 和 printArray!

解决方法

你试过一次脚背吗,我的意思是: ref.once('value',readOutData,errData); }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。