gpt4 book ai didi

javascript - 如何在发出集合的客户端上防止 'value' 事件?

转载 作者:数据小太阳 更新时间:2023-10-29 06:01:18 24 4
gpt4 key购买 nike

调用 set() 的 Firebase 客户端将导致所有连接的客户端触发 value - 包括 - 发出 设置()

在我的例子中(我认为在大多数情况下),发出 set() 的客户端没有理由响应它自己的调用产生的值事件。显然它的模型是正确的,没有必要改变它(这可能是一个昂贵的操作)。

有没有什么方法可以让客户端不接收/阻止/忽略由它自己的 set() 调用触发的 value 事件?我考虑过在 set() 周围使用 off/on,但这会使客户端错过同时发生但不是由它触发的 value 事件。

我是否漏掉了一些明显的东西?

最佳答案

大多数应用程序将 Firebase 数据本身视为它们的模型。因此,当有更新时,他们会调用 ref.set()(或另一个修改器函数),然后更新会通过 on() 事件返回到他们的应用程序中。 React/Flux 爱好者知道这是一个 unidirectional data-flow ,其他人可能知道它为 Command Query Responsibility Segregation .

但确实存在模型已经更新的情况,因此如果您是触发事件的人,您希望忽略来自 Firebase 的事件。

没有用于不接收这些自触发事件的 API。相反,您必须“记住”您发送到 Firebase 的数据并在您的 on() 处理程序中将其过滤掉。

来自 Firebase 的 Android 绘图示例 keeps a list of segments that it sends to Firebase然后 ignores those segments in its onChildAdded handler .它使用推送 ID 来识别线段,这些线段是在客户端生成的,因此它可以使用这些来跟踪识别线段。

这方面的 JavaScript 示例:

var pendingChildIds = []; // Push ids of nodes we've sent to the server, but haven't received in `on()` yet

// this code is in your UI event handler, or whatever triggers the needs to update your Firebase data
var newChild = ref.push();
pendingChildIds.push(newChild.key());
newChild.set(
{ property1: 'value1', property2: 3.14 },
function(error) {
// the write operation has completed, remove the child id from the list of pending writes
pendingChildIds.splice(pendingChildIds.indexOf(newChild.key());
}
);

// this is the event handler, using child_added in this case
ref.on('child_added', function(snapshot) {
if (!pendingChildIds.contains(snapshot.key())) {
// this is a child that we DIDN'T generate
}
});

关于javascript - 如何在发出集合的客户端上防止 'value' 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32087031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com