【问题标题】:Cant match users in firebase无法匹配 Firebase 中的用户
【发布时间】:2020-12-31 18:01:14
【问题描述】:

我无法从 firebase 随机获取用户

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

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

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

我试过了:

  • 我尝试从 firebase 实时数据库中获取所有用户
  • 我可以选择 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
    });
}

【问题讨论】:

    标签: reactjs react-native firebase-realtime-database google-cloud-firestore


    【解决方案1】:

    我认为您应该更改引用数据库的方式,因此应该是 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;
        }
    

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

    【讨论】:

    • 我得到 RefrenceError: Can't find variable:Data
    • 嗨@TunaGündüz,您可以尝试删除Data。否则,请尝试使用我更新的新代码。除此之外,请记住,您需要调整此代码,因为它未经测试,应该用作您的应用程序的基础。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2015-10-20
    • 1970-01-01
    • 2019-10-02
    • 2018-09-11
    • 1970-01-01
    相关资源
    最近更新 更多