Как получить ключ, как только в firebase изменилось значение? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть структура Firebase, подобная этой

Firebase Structure

Я хочу получить ключ / номер, как только статус станет 1.

Я пытался. .

//Listen for number
var ref = firebase.database().ref("games/" + gameId + "/numbers");

ref.orderByChild('status').equalTo('1').on("value", function(snapshot)
{
  snapshot.forEach((function(child){ 
    console.log(child.key);
  }));
});

Но каждый раз, когда статус обновляется, я получаю каждый номер со статусом = 1. Мне нужен только последний обновленный номер.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

используйте child_changed вместо value. Он вернет только одно значение, в котором будет изменен дочерний элемент, поэтому мы получим ключ напрямую snapshot.key.

//Listen for number
    var ref = firebase.database().ref("games/" + gameId + "/numbers");

    ref.orderByChild('status').equalTo('1').on("child_changed", function(snapshot)
    {
        console.log(snapshot.key);
    });

Думаю, это будет полезно для вас.

0 голосов
/ 30 апреля 2020

Когда вы слушаете событие value, вы каждый раз получаете снимок со всеми совпадающими данными.

Если вы хотите получать более детальные уведомления, вы можете прослушивать события child_*. Например, чтобы услышать, когда состояние узла установлено равным единице, вы можете прослушать child_added:

ref.orderByChild('status').equalTo('1').on("child_added", function(snapshot)
{
    console.log(snapshot.key);
});

. Обратите внимание, что я также удаляю forEach. Поскольку child_ события запускаются для каждого отдельного ребенка, вам больше не нужен l oop.

Если вам трудно определить, какое событие child_ слушать, я считаю, что проще всего думать запроса как «просмотр» данных. Когда статус дочернего узла установлен в 1, он входит в представление, поэтому он равен child_added. Когда статус дочернего узла устанавливается в другое значение, он покидает представление, поэтому он будет запускать child_removed.

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