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() Обратный звонок ожидать получить?

Временные ошибки?Клиент не в сети (сетевое соединение потеряно)?Сервер Firebase временно перегружен или недоступен для обслуживания, но скоро снова будет доступен?Постоянные ошибки?В разрешении отказано (из-заправила безопасности)Расположение базы данных не существует?

Есть ли способ отличить временные ошибки от постоянных?

Как мы должны обработать / исправить эти ошибки?

Для временных ошибок, нам нужно позвонитьfredRef.remove() снова через короткий промежуток времени повторить операцию?

2. Глобальный статус синхронизации

Я понимаю, что каждый звонок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 Перезвоните?

Ответы на вопрос(1)

Ваш ответ на вопрос