在一个网络应用程序中,我有这个:
function onChildAdded(snapshot) {
// ...
}
someFirebaseLocation.on('child_added', onChildAdded);
我正在寻找一种 100% 可靠的方法来检测 child_added 事件是否是即时的,以便我可以正确处理这两种情况:在 push() 之后立即调用函数(同步)与调用异步函数时。
我认为在 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)。
托比