Есть ли способ получить фактическую метку времени при использовании firebase.database.ServerValue.TIMESTAMP? - PullRequest
0 голосов
/ 07 января 2020

Этот вопрос касается javascript клиента.

У меня есть код, который выглядит примерно так:

const localEvents = [];
const fbEvents = firebase.database().ref("myevents");

fbEvents.on("child_added", function(snapshot) {
  const e = snapshot.val();
  localEvents.push(e);
});

function createEvent(e) {
  e.time = firebase.database.ServerValue.TIMESTAMP;
  fbEvents.push(e);
}

После вызова createEvent({}), кажется, что записи в моем localEvents список имеет значения time, которые не равны фактическим записям в базе данных (клиент угадывает метку времени и вызывает обработчик child_added до того, как он действительно совершит обратное обращение к серверу). Есть ли способ избежать этого и / или есть ли способ получить обратный вызов, когда известно фактическое значение time?

1 Ответ

1 голос
/ 07 января 2020

Невозможно, используя только моментальный снимок в слушателе, определить, пришла ли временная метка с сервера или угадывается локально.

Вместо этого вы можете использовать обещание, возвращенное из fbEvents.push(e) для определить, когда запись действительно удалась. Решенное обещание, которое означает, что оно определенно было написано в Firebase Обратный вызов слушателя, который вы получите после этого, будет содержать обновленное значение сервера.

(Обратите внимание, что с помощью Firestore можно определить, был ли документ полностью записан на сервер или нет. Только не с базой данных реального времени.)

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