文档这里但我不明白: .get() 和 .once() 有什么区别?
我的理解是,
.get()
从服务器读取,然后从本地存储读取,而.once()
只从本地存储读取。我已经使用 .once()
来检索值,而无需设置像 .on()
这样的侦听器,它似乎是从服务器(实时数据库)中检索我之前未检索过的值,所以我不确定它是什么意思说它只搜索本地存储...看起来它实际上是从服务器获取值。
请明确何时使用其中一种或另一种。
我根本没用过
.get()
。
firebaser在这里
实际上,在Web SDK中,
get()
和once('value'
之间没有实际区别,因为实时数据库的Web SDK。不支持磁盘持久化。
我们主要决定将
get()
方法添加到 JavaScript SDK,因为我们向 iOS 和 Android SDK 添加类似的方法,这些方法之间存在真正但微妙的差异。有关详细说明,请参阅 get() 和 addListenerForSingleValueEvent 之间有什么区别?(addListenerForSingleValueEvent
是 JavaScript once()
调用的 Android 变体)。
.get()
将始终尝试调用数据库,如果无法访问数据库或类似情况,则会回退到本地缓存。
另一方面;
.once()
将始终尝试从本地缓存获取值,而不是调用数据库,从而降低成本。
您还可以查看方法上的参考,这样会更清楚:
.get()
Gets the most up-to-date result for this query.
Returns Promise<DataSnapshot>
A promise which resolves to the resulting DataSnapshot if a value is available,
or rejects if the client is unable to return a value
(e.g., if the server is unreachable and there is nothing cached).
.once()
Listens for exactly one event of the specified event type,
and then stops listening.
This is equivalent to calling on(), and then calling off() inside
the callback function.
我希望这能澄清。
下面 Frank 的回答没有技术差异,但在实践中,在 Firebase 函数中使用
.get()
时,我似乎毫无理由地收到大量“客户端离线”错误。
我建议使用
.once()
请参阅此处的问题以供参考:https://groups.google.com/g/firebase-talk/c/VpQms_TnBOw?pli=1