阻止Firebase排队的方法

时间:2014-01-13 23:53:07

标签: firebase

假设客户1有:

messagesRef = new Firebase('https://yvv2pmvobjc.firebaseio-demo.com/');
messagesRef.on('child_changed',
               function (data, prev) { alert ("Changed " + data.val()); } ); `

假设客户2有:

messagesRef = new Firebase('https://yvv2pmvobjc.firebaseio-demo.com/');
Firebase.goOffline();
item = messagesRef.child('baz'); 
item.set("1");
item.set("2");
item.set("3");
Firebase.goOnline();

此代码将使用更改1 更改2 更改3 生成通知。我希望它只是返回 Change 3 而不是处理中间步骤。我更喜欢客户端1甚至根本不会将中间步骤发送到远程Firebase。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:2)

继续发表评论并扩展安德鲁的......

假设您有两个客户端A和B.客户端B负责在A正在收听时更新“Baz”。有几种情况需要考虑。

客户端A和B都已连接 - B多次更新“Baz”,A几乎实时接收所有这些更新。

客户端A仍处于联机状态,但B处于脱机状态(代码中列出的方案) - A仍然与Firebase建立连接,因此它正在等待更新。 B处于脱机状态,因此“Baz”的更新将由本地Firebase脚本排队。 B上线,它会触发Firebase的更新。 A仍然在线和收听,因此它几乎实时地接收所有这些更新。

当B保持在线时,客户端A将脱机。 B多次更新“Baz”。 “Baz”的最终值是“4”,不久之后,A上线了。当A上线时,Firebase只会向其发送Baz的最新值,因为A不在线并且在发生中间更新时正在收听。

最后,如果客户端A和B都处于脱机状态,那么B将对其更新进行排队,这实际上取决于哪一个首先联机以确定发生了什么。在这种情况下,它会变成其他场景之一。