Вот простейший пример возможного:Firebase.ServerValue.TIMESTAMP не синхронизируется между слушателями и клиентом, который фактически добавляет данных
var fb = new Firebase('https://xxxxxxxxxxx.firebaseio.com/test');
fb.limitToLast(1).on('child_added', function(snap) {
console.log('key', snap.key());
console.log('val', snap.val());
});
fb.push({
date_now: Firebase.ServerValue.TIMESTAMP
});
Если открыть две вкладки с этим сценарием, тот, который на самом деле толкает данных получает local временная метка в обратном вызове child_added, а другая вкладка, которая только что прослушивается, получает соответствующий сервер. Насколько я понимаю, это делается для того, чтобы исключить круглые поездки и сэкономить пропускную способность.
Но для моей задачи это поведение неприемлемо. Как я могу его преодолеть?
Это console.log от толкателя:
key -K59mrvEUhTaoNIQQoA4
val Object {date_now: 1449732570832}
и слушателей (равно к данным сервера видели в приборной панели):
key -K59mrvEUhTaoNIQQoA4
val Object {date_now: 1449732571759}
Решает проблему «child_changed». Большое спасибо! – DEgorov
Спасибо за объяснение Фрэнка! В этом случае я могу быть уверен, что значение, возвращаемое child_added, всегда будет отличаться от значения, возвращаемого child_changed? –
Нет. Если нет перекоса часов, значение с сервера будет одинаковым. Это маловероятно, но может случиться. –