问题描述
我正在创建一个来宾列表程序,该程序将来宾列表存储在 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!")
}
}
这是我输出的屏幕截图。提前致谢! 编辑:忘记提及并为我过度使用辅助功能而道歉!我的 HTML 表单首先为每个函数调用 printArrayy() 和 printArray!
解决方法
你试过一次脚背吗,我的意思是:
ref.once('value',readOutData,errData); }