Firebase JavaScript получить динамически созданный дочерний ключ? - PullRequest
0 голосов
/ 24 мая 2018

Экспериментируя с Firebase, я пытаюсь получить только что добавленного потомка, который добавляется динамически.Как я могу получить только: pi0usqkj16o?

var availability = database.ref("games/setup");
availability.once("value", function(snapshot){

    console.log(JSON.stringify( snapshot.val() ) );

}); 

snapshot.val() дает мне следующее:

{
    "pi0usqkj16o":{
        "player1":"ed",
        "player1Choice":"",
        "player1Wins":0,
        "player2":"",
        "player2Choice":"",
        "player2Wins":0,
        "total":0
    },
    "wpgnfq1swac":{
        "player1":"ed",
        "player1Choice":"",
        "player1Wins":0,
        "player2":"",
        "player2Choice":"",
        "player2Wins":0,
        "total":0
    }
}

Конечная цель будет заключаться в том, чтобы настроить таргетинг на вновь созданный каталог (дочерний), который динамически создается и получает имя серийного номера,возможно делать что-то подобное?var name = pi0usqkj16o;database.ref ("somefolder /" + name);`

но как я смогу изолировать только серийный номер от возвращенного выше json?

//App Code

  //INITIALIZE FIREBASE
  firebase.initializeApp(config);
  var database = firebase.database();


  var Methods = {

  //Makes a new serial (ex. pi0usqkj16o)
  function uniqueId(){
              return Math.random().toString(36).substr(2, 16);
            }

  //checks if a game room is already available
  initialCheck: function(callback){
        var availability = database.ref("games/setup");
        availability.once("value", function(snapshot){

          //if there is no readily available room already created..create a new room 
          if(snapshot.numChildren() < 1){
            var gameName = uniqueId();

            availability.update({
              [gameName]: {player1: "ed", player2: "", player1Choice: "", player2Choice: "", player1Wins: 0, player2Wins: 0, total: 0}
            });
          }
          else{
            var room = snapshot.key;
            // Need to find the room name to be able to assign it to the user.
            console.log("room is: " + room );
          }
        });
}

1 Ответ

0 голосов
/ 25 мая 2018

Чтобы получить этот EXACT ключ, должны быть какие-то уникальные данные, на которые вы можете легко ссылаться.Вот идея:

{
"pi0usqkj16o":{
    "player1":"ed",
    "player1Choice":"",
    "player1Wins":0,
    "player2":"",
    "player2Choice":"",
    "player2Wins":0,
    "total":0,
    "gameNumber":1
},
"wpgnfq1swac":{
    "player1":"ed",
    "player1Choice":"",
    "player1Wins":0,
    "player2":"",
    "player2Choice":"",
    "player2Wins":0,
    "total":0,
    "gameNumber":2
 }
}

Я добавил 'gameNumber' к вашим данным, который должен быть незаполненным после каждой игры.Теперь, чтобы получить точный ключ:

firebase.database().ref('games/setup').once("value", function(snapshot){
   var data = snapshot.val();
   if (data && snapshot.child('gameNumber').val() === '1'){
     console.log(snapshot.key);
   } else {
     console.log("no data"); 
   }
});

Это должно вернуть ключ, который вы ищете.Конечно, вам нужно будет откинуться на спинку кресла и подумать о способе реструктуризации ваших данных, чтобы сделать подобные запросы.

Также прочитайте это: https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...