Sincronização do Firebase de dados modificados localmente: tratamento de erros e status global

Eu tenho duas perguntas relacionadas a respeito doPlataforma Web Firebaseésincronização de dados modificados localmente para o servidor:

Todo cliente que compartilha um banco de dados Firebase mantém sua própria versão interna de qualquer dado ativo. Quando os dados são atualizados ou salvos, eles são gravados nesta versão local do banco de dados. O cliente Firebase sincroniza esses dados com os servidores Firebase e com outros clientes com base no 'melhor esforço'.

1. Manipulando Erros de Sincronização

Os métodos de modificação de dados (set(), remove(), etc) pode demoraronComplete parâmetro de retorno de chamada:

Uma função de retorno de chamada que será chamada quando a sincronização com os servidores Firebase for concluída. O retorno de chamada será passado umError objeto em falha; outronull.

var onComplete = function(error) {
  if (error) {
    console.log('Synchronization failed');
  } else {
    console.log('Synchronization succeeded');
  }
};

fredRef.remove(onComplete);

No exemplo acima, que tipo de erros ofredRef.remove() retorno de chamada espera receber?

Erros temporários?Cliente está offline (conexão de rede perdida)?O servidor Firebase está temporariamente sobrecarregado ou inativo para manutenção, mas estará disponível novamente em breve?Erros permanentes?Permissão negada (devido aregras de segurança)?O local do banco de dados não existe?

Existe uma maneira de distinguir entre erros temporários e permanentes?

Como devemos lidar / recuperar esses erros?

Para erros temporários, precisamos chamarfredRef.remove() novamente após um curto período de tempo, para tentar novamente a operação?

2. Status de sincronização global

Eu percebo que cada chamada paraset() eremove() receberá um resultado de sucesso / falha de sincronização individual noonComplete ligue de volta. Mas estou procurando uma maneira de determinar ostatus de sincronização global de todo o cliente Firebase.

Eu gostaria de usar umbeforeunload ouvinte de evento para avisar o usuário quando tentar sair da página antes que todos os dados modificados tenham sido sincronizados com o servidor, e estou procurando alguma função comofirebase.isAllModifiedDataSynced(). Algo assim:

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.';
    }
});

Aqui está um exemplo da mesma funcionalidade no Google Drive:

Estou ciente doespecial/.info/connected localização:

é útil que um cliente saiba quando está online ou offline. Os clientes Firebase fornecem um local especial em/.info/connected que é atualizado sempre que o estado da conexão do cliente é alterado. Aqui está um exemplo:

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");
  }
});

O especial/.info/connected local pode ser conectado a umbeforeunload ouvinte de eventos como este:

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.';
    }
});

Minha pergunta é:

E seisConnected étrue, isso também significa que todos os dados modificados foram sincronizados com o servidor?ou seja,"conectado" também significa"sincronizado"?

Caso contrário, como o aplicativo pode determinar o status de sincronização global de todo o cliente Firebase?

Existe um especial/.info/synchronized localização?O aplicativo precisa acompanhar manualmente o resultado de êxito / falha da sincronização de todos osonComplete ligue de volta?

questionAnswers(1)

yourAnswerToTheQuestion