这就是我的意思。我在javascript中有这个Queue类,可以与Firebase数据库一起使用。这是课程:
class Queue{
constructor(){
this.items=[];
}
enqueue(element){
this.items.push(element);
}
dequeue(){
if(this.isEmpty())
return "Underflow"
return this.items.shift();
}
front(){
if(this.isEmpty())
return "No patients in queue.";
return this.items[0];
}
isEmpty(){
return this.items.length==0;
}
printQueue(){
var str="";
for(var i=0; i<this.items.length;i++)
str+=this.items[i]+" ";
return str;
}
submitQueue(element){
for(var i=0; i<=this.items.length;i++){
if(this.items[i]==element){
return i;
break;
}
}
}
}
这是我实现Queue类的部分:
var queue = new Queue();
databaseRef
.orderByChild("appointmentDetail")
.equalTo(today)
.on("value", function(results){
if(!results.exists()){
event.stopPropagation();
window.alert("No patient available for today's date.");
}
else{
results.forEach(function(snapshot) {
var json= snapshot.val();
uid=json.authID;
queue.enqueue(json.email);
var x = queue.submitQueue(json.email)+1;
databaseRef.child(uid).update({"/queue":x});
});
event.stopPropagation();
window.alert("Queue generated for today.");
}
});
这个想法是,firebase数据库将遍历所有具有“ appointmentDetail”日期与当前日期相同的用户。然后,使用他们的电子邮件数据将每个用户添加到队列中。然后,要将每个用户的队列号添加到数据库,我使用了SubmitQueue(element),它在队列中循环遍历数据,如果队列中的电子邮件数据等于给定的电子邮件数据,则检索队列号并更新到相应用户的数据库。这将一直发生,直到已检索到所有用户的队列号。
我在这里面临的问题是,我有4位用户的日期与当前日期相同,并且为他们生成了队列。数据库中为每个用户更新的队列号分别为1、3、6和10,而不是1、2、3和4。