我正在尝试聊天,男生与女生配对,女生与男生配对。
我使用Firebase处理后端。一旦用户进入该页面,他就被分配到名为"搜索"的数据库。这就是我为配对所得到的:
this.ref = firebase.database().ref("searching").orderByChild("sex").equalTo(this.lookingFor).limitToFirst(1).on("child_added", (snap) => {
this.pairedUserUid = snap.val().uid; //Matches the users
firebase.database().ref("searching").child(snap.val().uid).remove(); //Remove user from searching database
}
如果只有一个人看起来有效。问题是当两个用户正在搜索相同的内容时。例如:
用户X是一个寻找女孩用户的人; 用户Y也是一个寻找女孩用户的人;
用户Z进入应用程序,是一个女孩,正在寻找有用户的用户。
用户X和Y都与Z配对! 我真正想要的只是其中一个(X或Y)与Z配对而另一个在等待。
我怎样才能做到这一点?
答案 0 :(得分:0)
这就是我解决它的方法:
我改变了#34;"到"一次"。这样,只有在用户登录后才会查询数据库。如果找到,请在该用户和另一个用户的数据库中注册聊天:
this.ref = firebase.database().ref("searching").orderByChild("sex").equalTo(this.lookingFor).limitToFirst(1).once("child_added", (snap) => {
//Matches the users
this.pairedUserUid = snap.val().uid;
//Register the chat to the user database
this.ref1 = firebase.database().ref("users").child(this.AngularFireAuth.auth.currentUser.uid).child("chats").push({
otherUserUid: this.otherUserUid,
});
//Register the chat to the other user database
this.ref1 = firebase.database().ref("users").child(this.otherUserUid).child("chats").push({
otherUserUid: this.auth.currentUser.uid,
});
//Remove user from searching database
firebase.database().ref("searching").child(snap.val().uid).remove();
});
如果没有找到,则用户获得"被动"听取他聊天数据库的变化(这次使用" on"):
this.ref1 = firebase.database().ref("users").child(this.AngularFireAuth.auth.currentUser.uid).child("chats").on("child_added", (snap) => {
//Matches the users
this.otherUserUid = snap.val().otherUserUid;
});