onSnapshot fromCache sempre false quando la modifica è locale
Secondo la descrizione qui, mi aspetto snapshot.metadata.fromCache
di essere true
quando il documento ascoltato viene modificato nello stesso client dell'ascoltatore, ad es.
- Il locale
.update(...)
attiva immediatamente ilonSnapshot
gestore (e viene consegnato uno snapshot confromCache
impostato sutrue
) - I dati vengono inviati al db
- Il client Firebase riceve il messaggio di ritorno e non fa nulla (non attiva a
onSnapshot
) perché i dati del server concordano con la cache.
Ergo, fromCache
dovrebbe sempre essere true
quando onSnapshot viene attivato da una modifica locale.
Tuttavia, questo sembra essere il caso solo per le prime due o tre risposte su Snapshot, dopodiché fromCache
sembra essere sempre false
.
Test di esempio:
// ... firestore init w/ a test project and with persistence enabled.
const db = firebase.firestore();
db.settings({
ignoreUndefinedProperties:true
})
// Where "_test" is an empty collection with full allowance for read/write
await db.collection("_test").doc("deleteme").set({});
let doc = db.collection("_test").doc("deleteme")
// ?! Expect this to be true but after the first one or two occurrences it is always false.
doc.onSnapshot(s=>{console.log("test snapshot change from cache? ",s.metadata.fromCache)})
let x = 0;
let poke = async ()=>{
doc.update({
n:Math.random()
})
await sleep(3000); // generic custom delay
window.requestAnimationFrame(poke)
};
window.requestAnimationFrame(poke);
Modifica : la domanda qui è dovuta alla mancanza di conoscenze analoghe a quella dell'altra domanda: l' evento di aggiornamento Firestore onSnapshot è dovuto al set di client locale?
Risposte
Ergo, fromCache dovrebbe sempre essere vero quando onSnapshot viene attivato da una modifica locale.
Non credo che sia così che sia definito; è più che altro se il client sa se la sua istantanea locale è aggiornata con il server.
Forse stai confondendo fromCache
con hasPendingWrites
. Il fromCache
nome è davvero confuso. Capisco fromCache
che "potrebbe non contenere ancora tutti i dati del server", mentre isPending
è "potrebbe contenere dati di cui il server non è ancora a conoscenza".