如何在 Firebase 9 中使用 ref.once?
与以下相关的所有包含代码示例的文档 firebase.database
适用于版本 8 及更低版本。通过探索导出的模块本身,我获得了很多直觉,但我不知道如何更新像 ref.once('value')
这样的代码。
其他代码现在是这样的:
ref.update(data); // old
update(ref, data); // new
但是没有像 once(ref, data)
那样使用 once
来执行 once
。此外,创建的引用似乎缺乏任何可用的属性。
这意味着如何针对 Firebase 进行更新9.x? Firebase 9 文档似乎没有提供任何示例。
All of the docs that have code examples related to firebase.database
are for version 8 and below. I've intuited a lot from exploring the exported modules themselves, but one thing I can't figure out how to update is code like ref.once('value')
.
Other code is now like:
ref.update(data); // old
update(ref, data); // new
But there is no once
to do once
to use like once(ref, data)
. Additionally the created refs seem to lack any property to use.
How is this meant to be updated for Firebase 9.x? The Firebase 9 docs don't seem to offer any example.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这里是 firebaser
once('value'
方法已被get()
函数替换,因此:另请参阅有关 读取数据一次
(因此) 。不是
get()
) 您现在可以使用您调用的函数的返回值来订阅,因此,如果您订阅:
您可以稍后取消订阅:
这是 Firestore SDK 已经执行的操作和反馈。表明开发人员更喜欢关闭而不是关闭。
firebaser here
The
once('value'
method has been replace by aget()
function, so:Also see the Firebase documentation on reading data once.
To unsubscribe from a realtime listener (so not
get()
) you now can use the return value from the function you called to subscribe.So if you subscribe with:
You can then later unsubscribe with:
This is what the Firestore SDKs already did, and feedback indicated that devs preferred that over
off
.注意(~2022 年 6 月 24 日;firebase v9):而
get()
是 推荐 一次读取数据的方式(参见Frank 的帖子),目前get()
存在一些未解决的问题,其中客户端执行 同一引用路径上具有不同过滤器的多个查询会以某种方式导致查询之间的干扰,从而导致意外触发事件(请参阅下面的链接)。我也经历过这个,调试起来相当困难。这可能是由get()
的缓存机制引起的,如下问题所示:解决方法:除了通过
get()
检索结果之外,您还可以使用onValue()
(请参阅价值观察者),然后在项目完成后立即断开连接返回:免责声明:请注意,
onValue()
与onlyOnce: true
结合使用将立即从 Firebase 的本地磁盘缓存返回值(如果存在) ,而不是检查首先更新服务器上的值(就像get()
的情况一样)。2022年8月27日更新:
firebase-js-sdk 团队似乎最近解决了这个问题 和 Firebase v9.9.3
get()
现在可以按预期工作。Heads up (~24 Jun 2022; firebase v9): While
get()
is the recommended way to read data once (see Frank's post), there are currently some unresolved issues withget()
where a client's execution of multiple queries with different filters on the same ref path somehow causes interference between the queries resulting in the unexpected triggering of events (see links below). I also experienced this and it's quite hard to debug. It is probably caused byget()
's caching mechanism as hinted at by the issues below:Workaround: Instead of retrieving results via
get()
, you can also useonValue()
(see value observer) and then disconnect it immediately after the item has been returned:Disclaimer: Note that
onValue()
in combination withonlyOnce: true
will return values from firebase's local disk cache immediately (if present), instead of checking for an updated value on the server first (as it is the case withget()
).Update from 2022-08-27:
It seems the firebase-js-sdk team solved this recently and with with Firebase v9.9.3
get()
is working as expected now.