2017-11-02 3 views
0

In der Dokumentation über Cloud Firestore Batched writes Ich lese "Sie können Batch-Schreibvorgänge ausführen, auch wenn das Gerät des Benutzers offline ist."Wie schreibt der Cloud Firestore Batched arbeitet im Offline-Modus

Kann dies ausgeschaltet oder ist es standardmäßig deaktiviert, da der Text "kann" sagen. The Cloud Firestore Transaktion wird scheitern, wenn Es ist offline und ich möchte Batched die gleiche

ich das Gefühl zu tun, schreibt ich für das Ergebnis in der OnCompleteListener überprüfen:

batch.commit().addOnCompleteListener(new OnCompleteListener<Void>() { 
    @Override 
    public void onComplete(@NonNull Task<Void> task) { 
     // offline/online?? 
    } 
}); 

Ich denke, das Doc sollte einige Erklärungen zu diesem

Antwort

2

Firestore-Transaktionen bestehen, um atomare Read-Modify-Write-Operationen vom Client durchführen zu können. Um diese Garantie zu gewährleisten, müssen die Kunden online sein.

Batch-Schreibvorgänge sind eine begrenzte Art von Transaktion, die speziell dazu dient, Benutzern zu ermöglichen, mehrere Dokumente in einer Alles-oder-Nichts-Weise zu ändern, auch wenn sie offline sind.

Wenn Sie offline nicht schreiben müssen oder wollen, verwenden Sie einfach eine reguläre Transaktion: Sie prüft, ob Sie online sind oder nicht, wenn Sie offline sind. Sie sind nicht verpflichtet, etwas in der Transaktion zu lesen.

Das Überprüfen des Ergebnisses in OnCompleteListener für einen Batch-Schreibvorgang funktioniert nicht für diesen Zweck. Sie konnten in diesem Rückruf nichts verhindern, da es erst aufgerufen wird, wenn der Schreibvorgang erfolgreich auf den Server angewendet wurde.

+0

Danke Ich bin von Firebase Realtime-Datenbank migrieren und dort habe ich die 'updateChildren()', um alles oder nichts auf 10 Nicken durchzuführen. Wie Sie vorschlagen, Cloud Firestore Transactions zu verwenden, denke ich, dass man nur eine Sammlung/ein Dokument nimmt, also muss ich 10 Transaktionen ausführen? – Erik

+1

Batch-Schreibvorgänge sind das Firestore-Äquivalent von updateChildren. Sie können Ihre 10 Updates in einem einzigen Stapel speichern und sie werden automatisch auf dem Server angewendet. Ihre Frage zeigte an, dass Sie das nicht zulassen möchten, wenn der Benutzer nicht online war. Wenn dies der Fall ist, verwenden Sie eine Transaktion anstelle eines Batch-Schreibvorgangs, da diese Anforderung erzwungen wird. Mit beiden Methoden können Sie mehrere Dokumente gleichzeitig bearbeiten. –

+0

ok Ich sehe, dass jetzt die Transaktion 10 verschiedene Dokumente nehmen kann. Vielen Dank – Erik

Verwandte Themen