Firebase-синхронизация локально-модифицированных данных: обработка ошибок и глобальный статус
У меня есть два связанных вопроса относительноВеб-платформа Firebase«sсинхронизация локально-модифицированных данных с сервером:
Каждый клиент, использующий базу данных Firebase, поддерживает собственную внутреннюю версию любых активных данных. Когда данные обновляются или сохраняются, они записываются в эту локальную версию базы данных. Затем клиент Firebase синхронизирует эти данные с серверами Firebase и другими клиентами на основе «максимальных усилий».
1. Обработка ошибок синхронизацииМетоды модификации данных (set()
, remove()
и т. д.) может взятьonComplete
параметр обратного вызова:
Функция обратного вызова, которая будет вызываться после завершения синхронизации с серверами Firebase. Обратный звонок будет переданError
объект на провал; ещеnull
.
var onComplete = function(error) {
if (error) {
console.log('Synchronization failed');
} else {
console.log('Synchronization succeeded');
}
};
fredRef.remove(onComplete);
В приведенном выше примере, какие ошибки должныfredRef.remove()
Обратный звонок ожидать получить?
Есть ли способ отличить временные ошибки от постоянных?
Как мы должны обработать / исправить эти ошибки?
Для временных ошибок, нам нужно позвонитьfredRef.remove()
снова через короткий промежуток времени повторить операцию?
Я понимаю, что каждый звонокset()
а такжеremove()
получит индивидуальный результат синхронизации / успеха вonComplete
Перезвоните. Но я ищу способ определитьсостояние глобальной синхронизации всего клиента Firebase.
Я хотел бы использоватьbeforeunload
прослушиватель событий, чтобы предупредить пользователя, когда он пытается покинуть страницу, прежде чем все измененные данные были синхронизированы с сервером, и я ищу какую-то функцию, напримерfirebase.isAllModifiedDataSynced()
, Что-то вроде этого:
window.addEventListener('beforeunload', function (event) {
if (!firebase.isAllModifiedDataSynced()) {
event.returnValue = 'Some changes have not yet been saved. If you ' +
'leave this page, your changes will be lost.';
}
});
Вот пример того же функционала в Google Диске:
Я знаю оспециальный/.info/connected
место нахождения:
Клиенту полезно знать, когда он подключен к сети или нет. Клиенты Firebase предоставляют специальное местоположение на/.info/connected
который обновляется каждый раз, когда изменяется состояние соединения клиента. Вот пример:
var connectedRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/.info/connected");
connectedRef.on("value", function(snap) {
if (snap.val() === true) {
alert("connected");
} else {
alert("not connected");
}
});
Специальный/.info/connected
местоположение может быть связано сbeforeunload
слушатель событий, как это:
var connectedRef = new Firebase('https://myapp.firebaseio.com/.info/connected');
var isConnected = true;
connectedRef.on('value', function (snap) {
isConnected = snap.val();
});
window.addEventListener('beforeunload', function (event) {
if (!isConnected) {
event.returnValue = 'Some changes have not yet been saved. If you ' +
'leave this page, your changes will be lost.';
}
});
Мой вопрос:
ЕслиisConnected
являетсяtrue
, это также означает, что все измененные данные были синхронизированы с сервером?то есть"связано" также имею в виду«Синхронизируется»?Если нет, то как приложение может определить глобальный статус синхронизации всего клиента Firebase?
Есть ли особый/.info/synchronized
место нахождения?Нужно ли приложению вручную отслеживать успех / неудачу синхронизации каждогоonComplete
Перезвоните?