Webアプリでは、これがあります:
function onChildAdded(snapshot) {
// ...
}
someFirebaseLocation.on('child_added', onChildAdded);
child_added イベントが即時であるかどうかを検出する 100% 信頼できる方法を探しています。これにより、push() の後で関数がすぐに呼び出される場合 (同期) と、関数が非同期で呼び出される場合の 2 つのケースを正しく処理できます。
push() 呼び出しの前にフラグを設定することは信頼できないと思います。(非同期イベントが発生したときに競合状態になる可能性があり、エラーが発生したときにフラグがリセットされない可能性があります)。
別のオプションは
var pushed = push(...);
そして child_added で
if (snap.name() === pushed)
しかし、着信メッセージが同じ .name() を持つ可能性があるため、衝突が発生する可能性があります。衝突の可能性については議論の余地がありますが、私は情報を取得するためのシンプルで完全な方法を好みます。
私がこれを行うことができれば素晴らしいでしょう:
function onChildAdded(snapshot, prevChildName, isImmediateEvent) {
if (isImmediateEvent) {
// Handle as sync event.
} else {
// Handle as async event.
}
}
someFirebaseLocation.on('child_added', onChildAdded);
またはこれ
function onChildAdded(snapshot, prevChildName) {
if (snapshot.isFromImmediateEvent) {
// Handle as sync event.
} else {
// Handle as async event.
}
}
someFirebaseLocation.on('child_added', onChildAdded);
他に信頼できるオプションはありますか?それ以外の場合は、Firebase 担当者に、ブール値の "isImmediateEvent" を一般的にコールバックに渡すことができるかどうかを尋ねます (スナップショットの後、prevChildName)。
トビ