如何使用Javascript正确配对两个用户

时间:2017-09-01 02:11:21

标签: javascript firebase firebase-realtime-database

我正在尝试聊天,男生与女生配对,女生与男生配对。

我使用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配对而另一个在等待。

我怎样才能做到这一点?

1 个答案:

答案 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;
});