在网络应用中,我有这个:
function onChildAdded(snapshot) {
// ...
}
someFirebaseLocation.on('child_added', onChildAdded);
我正在寻找一种100%可靠的方法来检测child_added事件是否是立即的,这样我就可以正确处理这两种情况:当在push()之后立即调用函数(sync)与函数获取时叫做异步。
我认为在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人员他们是否通常可以将bool“isImmediateEvent”传递给回调(在snapshot,prevChildName之后)。
托比
答案 0 :(得分:2)
您现在已经涵盖了两个选项,其中一个应该可靠地工作(请参阅下面的注释)。我们可能会在将来添加功能以使其更容易,但此时没有具体计划。
一对夫妇注意到: