変更がローカルの場合、onSnapshotfromCacheは常にfalse
Aug 24 2020
説明によると、ここで私が期待するsnapshot.metadata.fromCache
ことtrue
に耳を傾けされた文書は、リスナー、例えば同じクライアントで変更されたとき
- ローカルは
.update(...)
すぐにonSnapshot
ハンドラーをトリガーします(そしてにfromCache
設定されたスナップショットが渡されますtrue
) - データはデータベースに送信されます
onSnapshot
サーバーデータがキャッシュと一致するため、Firebaseクライアントはリターンメッセージを受信し、何もしません(トリガーしません)。
エルゴ、onSnapshotがローカルの変更によってトリガーされたときにfromCache
常に存在true
する必要があります。
ただし、これは最初の2〜3つのonSnapshot応答にのみ当てはまるようであり、その後fromCache
は常にそうであるように見えますfalse
。
テスト例:
// ... 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);
編集:ここでの質問は、この他の質問と同様に知識が不足しているためです:ローカルクライアントセットによるFirestore onSnapshot更新イベントですか?
回答
1 FrankvanPuffelen Aug 26 2020 at 03:45
エルゴ、fromCacheは、onSnapshotがローカルの変更によってトリガーされた場合、常にtrueである必要があります。
私はそれがどのように定義されているとは思いません。それは、クライアントがローカルスナップショットがサーバーに対して最新であるかどうかを知っているかどうかということです。
あなたは多分と混同fromCache
しhasPendingWrites
ます。fromCache
名前は確かに混乱しています。fromCache
「サーバーからのすべてのデータがまだ含まれていない可能性がある」と理解しisPending
ていますが、「サーバーがまだ認識していないデータが含まれている可能性があります」です。