Firebase编写文档和冻结应用程序需要很长时间



我正试图在Firebase上向文档写入一个数组,如下代码所述。然而,当该数组包含100个项目时(只有字符串形式的名称,因此数据量没有问题(,它会冻结应用程序一分钟,在控制台中我会收到消息

无法访问Cloud Firestore后端。后端在10秒内没有响应。这通常表示您的设备目前没有正常的互联网连接。客户端将以脱机模式运行,直到能够成功连接到后端。

不过互联网连接很好。这个问题也发生在只有20个项目的较小数组中,但并不那么明显。

我做错了什么,导致应用程序花了这么长时间才写入Firebase?

func saveDocOnline() {
let db = Firestore.firestore()
db.collection("Collection 1").document("Document 1").setData([
"Array" : loadItems()
]) { (error) in
if let e = error {
print("Error saving: (e)")
} else {
print("Successfully Saved Online")
}
}
}
func loadItems() -> [String] {
var itemTitle: [String] = []
itemTitle = ["Generic", "Generic Bars", "Generic Restaurants" ... "Halloween", "Jazz", "Xmas", "Acid Jazz"]
return itemTitle
}

非常奇怪。不能100%确定是什么原因导致了这种情况。我尝试加载类似大小的数据而没有问题,但我会尝试一些事情。

  1. 调用内部函数作为setData()的参数可能会出现问题。尝试在setData line之前用let data:[String:[String]] = loadData()初始化loadData的内容。然后使用data而不是loadData()作为参数。这将做两件事:如果Firebase由于某种原因出现问题,它将有助于类型推断;如果Firebase不喜欢,它将限制函数的范围。

  2. (编辑:忽略这个建议,只需重读你的帖子,我可以看到你已经尝试过了(还可以用较小的数组进行实验,看看你是否能成功地写出50个项目。如果有效的话,就选75,如果不行,就选25。等等。在这种情况下,你可以在数组中放置的项目数量可能有限制,但这将是firebase的一个非常奇怪的限制。

  3. 尽量不要使用关键字数组,我认为这不会影响它,但为了安全起见。

所有这些解决方案,如果有效,都会表明firebase框架内部存在一些奇怪之处,但至少可以消除这些可能性。

最新更新