Firebase 保存数据方法异步或同步

Posted

技术标签:

【中文标题】Firebase 保存数据方法异步或同步【英文标题】:Firebase Saving Data Methods Asynchronous or Synchronous 【发布时间】:2016-11-13 08:02:58 【问题描述】:

firebase 保存数据的方法,例如 childByAutoId 和 updateChildValues 是异步的还是同步的?似乎没有地方可以传入完成处理程序,所以我猜它们是同步的,但我不确定,因为 Firebase 会使这些常用方法同步似乎有点奇怪(出于性能目的)。

【问题讨论】:

【参考方案1】:

与几乎所有现代网络一样,与 Firebase 数据库的交互是一种异步操作。这就是 Firebase 数据库 API 中的大多数方法都可以使用完成块的原因。

对于写操作,该块有时是可选的,因为在某些情况下您可能不想指定完成块。

例如,这里是 updateChildValues:withCompletionBlock 的 API 参考文档:

updateChildValues:withCompletionBlock:

斯威夫特

func updateChildValues(values: [NSObject : AnyObject], withCompletionBlock block: (NSError?, FIRDatabaseReference) -> Void)

参数

values - 要更改的键及其新值的字典

block - 在 Firebase 数据库服务器上写入更新后触发的块

childByAutoId 方法是客户端操作;它不需要与 Firebase 服务器交互,这也是它可以在用户未连接到数据库时运行的原因之一。由于它不需要与服务器交互,所以它是同步的并立即返回对新位置的引用,这保证了唯一性。如果您想详细了解childByAutoId 生成的密钥,请阅读这篇博文The 2^120 Ways to Ensure Unique Identifiers。

【讨论】:

以上是关于Firebase 保存数据方法异步或同步的主要内容,如果未能解决你的问题,请参考以下文章

异步调用导致的不同步问题

将复杂的结构保存到 firebase

Firebase读取/保存数据以将其用作列表|斯威夫特/火力地堡

GeoFire setLocation 方法不会将位置保存到 Firebase 数据库

分选机总结

使用 Firebase 的最佳做法(保存)