Firebase-Synchronisation lokal geänderter Daten: Fehlerbehandlung und globaler Status
Ich habe zwei verwandte Fragen zumFirebase Webplattform 'ssynchronisation lokal geänderter Daten auf den Server:
eder Client, der eine Firebase-Datenbank freigibt, verwaltet seine eigene interne Version aller aktiven Daten. Wenn Daten aktualisiert oder gespeichert werden, werden sie in diese lokale Version der Datenbank geschrieben. Der Firebase-Client synchronisiert diese Daten dann nach besten Kräften mit den Firebase-Servern und anderen Clients.
1. Behandlung von SynchronisationsfehlernDie Datenänderungsmethoden set()
, remove()
, etc) kann ein @ nehmonComplete
Rückrufparameter:
Eine Rückruffunktion, die aufgerufen wird, wenn die Synchronisation mit den Firebase-Servern abgeschlossen ist. Der Rückruf wird mit einem @ beantwortError
Objekt bei Fehler; sonstnull
.
var onComplete = function(error) {
if (error) {
console.log('Synchronization failed');
} else {
console.log('Synchronization succeeded');
}
};
fredRef.remove(onComplete);
In obigem Beispiel, welche Art von Fehlern sollte dasfredRef.remove()
Rückruf erwartet?
Gibt es eine Möglichkeit, zwischen vorübergehenden und dauerhaften Fehlern zu unterscheiden?
Wie sollen wir mit diesen Fehlern umgehen / sie beheben?
Bei vorübergehenden Fehlern müssen wir @ anruffredRef.remove()
Nach kurzer Zeit erneut versuchen, den Vorgang zu wiederholen?
Ich merke, dass jeder Anruf anset()
undremove()
erhält ein individuelles Ergebnis für die erfolgreiche / fehlgeschlagene Synchronisierung imonComplete
Ruf zurück. Aber ich suche nach einer Möglichkeit, das @ zu bestimmglobaler Synchronisationsstatus des gesamten Firebase-Clients.
Ich möchte ein @ verwendbeforeunload
Event-Listener, um den Benutzer zu warnen, wenn er versucht, die Seite zu verlassen, bevor alle geänderten Daten mit dem Server synchronisiert wurden, und ich suche nach einer Funktion wiefirebase.isAllModifiedDataSynced()
. Etwas wie das
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.';
}
});
Hier ist ein Beispiel für die gleiche Funktionalität in Google Drive:
Ich kenne dasBesondere/.info/connected
Lag:
it ist nützlich, damit ein Client weiß, wann er online oder offline ist. Firebase-Clients bieten einen speziellen Standort unter/.info/connected
, das jedes Mal aktualisiert wird, wenn sich der Verbindungsstatus des Clients ändert. Hier ist ein Beispiel
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");
}
});
Das Sonderangebot/.info/connected
location kann mit einem @ verbunden werdbeforeunload
Event-Listener wie folgt:
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.';
}
});
Meine Frage ist
WennisConnected
isttrue
, Bedeutet dies auch, dass alle geänderten Daten mit dem Server synchronisiert wurden? d.h. Hat"in Verbindung gebracht" also mean "synchronisiert"?Wenn nicht, wie kann die App den globalen Synchronisierungsstatus des gesamten Firebase-Clients ermitteln?
Gibt es ein spezielles/.info/synchronized
Lage Muss die App den Erfolg / Misserfolg der Synchronisierung für jedes @ manuell protokolliereonComplete
Ruf zurück