首页 > 解决方案 > 无法匹配 Firebase 中的用户

问题描述

我无法从 firebase 随机获取用户

我正在使用 react native 和 firebase 做约会应用。

用户可以用google登录并设置他们的帐户,但我无法匹配用户。

我可以选择 1 个用户,但不能显示用户的数据。

我试过了:

user.uid即使我登录,有时也会返回 null。

function getRandomUser() {
  const numberOfUsers = 15;
  const randomIndex = Math.floor(Math.random() * numberOfUsers);
  var ref = firebase.database().ref("/users/");

  ref
    .limitToFirst(1)
    .once("value")
    .then((snapshot) => {
      var randomUser = snapshot.val();      
      console.log(randomUser);
      console.log(randomUser.bio);//this is not even display in console
    });
}

标签: reactjsreact-nativefirebase-realtime-databasegoogle-cloud-firestore

解决方案


我相信你应该改变你引用数据库的方式,所以它应该是var ref = firebase.database().ref("users");而不是var ref = firebase.database().ref("/users/");.

之后,是一些与随机数相关的更改以及您需要执行的比较问题,因此会返回值。请使用以下代码尝试一下。

    var dbUser = firebase.database(); 
    var refUser = dbUser.ref("<collection>");
    refUser.orderByChild("online").equalTo(1).on("value", function(Data){
    var numberOfUsers = 15;
    var randomIndex = Math.random() * numberOfUsers;
    var userIndex = parseInt(randomIndex, 10); //parse the random number from double to integer
    var currentIndex = 0;
    var BreakException = {};
    try
    {
        Data.forEach(function(snap){
            if(currentIndex==userIndex){
                var randomUser = snap.val();
                //Do something with your random user
                throw BreakException;
            }
            currentIndex++;
        });
    }
    catch(e){
        if(e!== BreakException) throw e;
    }

虽然此代码未经测试,但它基于这里的成功用例,我相信应该对您有所帮助。除此之外,您还可以获得另一种返回随机用户的方式,但现在使用索引,通过在此处检查此类似案例,以及来自 Firestore 的产品主管的非常完整的答案。


推荐阅读