gpt4 book ai didi

javascript - 使用带有事务的 `once` 回调检索 Firebase 值

转载 作者:行者123 更新时间:2023-11-29 21:56:48 25 4
gpt4 key购买 nike

我想使用 once 方法从 Firebase ref 检索数据,但我没有收到快照中的任何数据。这是简单的数据检索:

编辑 经过进一步检查,我发现在 once 值监听器之后不久安排了一个事务。 (为简单起见,对于此代码示例,我将事务直接放在监听器之后。)

dataRef.once('value', function (snapshot) {
snapshot.val(); // returns `null`
});

dataRef.transaction(function (currentValue) {
if (currentValue) {
// make changes
}
return currentValue;
});

此 firebase ref 中有数据。为了验证,我尝试使用 on 而不是 once。在这种情况下,回调被调用两次:

dataRef.on('value', function (snapshot) {
snapshot.val(); // returns `null` first, then called again and returns correct value
});

是什么导致了这种行为?我希望快照在第一次调用回调时具有正确的值。否则,once 方法没有用处。

最佳答案

Firebase docs transaction 有第三个参数 applyLocally

By default, events are raised each time the transaction update function runs. So if it is run multiple times, you may see intermediate states. You can set this to false to suppress these intermediate states and instead wait until the transaction has completed before events are raised.

由于这个默认值,once 值监听器在事务第一次在本地运行后触发,即使没有从服务器检索数据(传递 null 作为交易的 currentValue)。通过传递 false 作为 applyLocally 参数,这个本地事件被抑制,并且只有在从服务器:

dataRef.transaction(function (currentValue) {
if (currentValue) {
// make changes
}
return currentValue;
},
function(){},
false);

关于javascript - 使用带有事务的 `once` 回调检索 Firebase 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151200/

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