Firebase / ReactJS, получить последний запрос в базе данных - PullRequest
0 голосов
/ 25 сентября 2018

Я новичок в firebase и реагировать.Мне было интересно получить значение идентификатора последнего вставленного запроса вactjs с firebase.Спасибо

firebase.database().ref().child("clients").orderByChild("ID").limitToLast(1)("value", function (snapshot) {
  snapshot.forEach(function(childSnapshot) {
    var cellNum=childSnapshot.val().CellNum;

  });
});

this.setState(
{
  ID: cellNum

}, () => {

});

enter image description here

1 Ответ

0 голосов
/ 25 сентября 2018

Причина в том, что Firebase загружает данные асинхронно.Поскольку это может занять некоторое время, это позволяет вашему коду продолжить работу.Затем, как только данные становятся доступны, он вызывает ваш обратный вызов с моментальным снимком данных.

Проще всего это увидеть с некоторыми удачно расположенными лог-операторами:

console.log("Before starting query")
firebase.database().ref().child("clients").orderByChild("ID").limitToLast(1)("value", function (snapshot) {
  console.log("Got data");
});
console.log("After starting query")

Когда вы запускаете этокод, он печатает:

Перед началом запроса

После запуска запроса

Получил данные

Это, вероятно, не тот порядок, которыйты ожидалНо это прекрасно объясняет, почему не удается вызвать setState в вашем коде.Когда вы звоните setState, данные еще не загружены.

cellNum доступен только внутри обратного вызова.Таким образом, вызов к setState также должен быть в этом обратном вызове:

firebase.database().ref().child("clients").orderByChild("ID").limitToLast(1)("value", function (snapshot) {
  snapshot.forEach(function(childSnapshot) {
    var cellNum=childSnapshot.val().CellNum;
    this.setState({
      ID: cellNum
    }, () => { });
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...