swift - Firebase 在调用下一个方法之前没有完成
问题描述
我正在使用以下内容调用 firebase 数据库:
let myRef1 = Database.database().reference(withPath: "/tests/\ .
(myTest)")
print(myTest)
myRef1.observe(.value, with: {
snapshot in
print(snapshot)
var newItems: [qItem] = []
for item in snapshot.children {
let mItem = qItem(snapshot: item as! DataSnapshot)
newItems.append(mItem)
print(newItems)
}
self.myArray = newItems.shuffled()
print(self.myArray)
})
loadNext()
...
然而,它在移动到下一个方法调用之前永远不会完成完成处理程序,这取决于由此产生的结果。
尝试将其设为单独的方法等,但似乎没有任何效果。
解决方案
您需要在 中添加方法才能在检索数据后调用它loadNext()
。observe
当您检索数据时,它是异步发生的,这意味着编译器不会等到所有数据都被检索到,它会loadNext()
先调用该方法,然后在完成检索数据后执行print(newItems)
,因此您需要执行以下操作:
myRef1.observe(.value, with: {
snapshot in
print(snapshot)
var newItems: [qItem] = []
for item in snapshot.children {
let mItem = qItem(snapshot: item as! DataSnapshot)
newItems.append(mItem)
print(newItems)
loadNext()
}
self.myArray = newItems.shuffled()
print(self.myArray)
})
推荐阅读
- node.js - 错误:EIO:i/o 错误、scandir 和 npm 配置
- parallel-processing - 关于平均值的问题。n维k-cube的延迟
- python - 如何根据python中句子的上下文提取数字?
- sql - 使用棘手的分组查询
- javascript - 折叠 JSON 字符串以发送标头变量 - Mailgun
- python - Pysimplegui 在图中使用 gif
- html - 借助 JSP 中的枚举生成嵌套的下拉列表
- amadeus - api调用中明确包含缺少的关键字参数
- python-3.x - 我正在尝试删除 python 中以 / 开头的文本行
- javascript - currentUser 正在返回未定义