所以我有一个类型为Order的数组AllOrders,每次我想要刷新表我想清空AllOrders数组以从数据库中获取新的信息。 但问题是我总是得到一个空数组。
我尝试了以下解决方案:
创造了一个延迟:当我把延迟时间延长到42秒时,这个工作有效,但谁可以等待42秒。来吧...
搜索了异步同步的转换器,但没有找到任何内容。
我知道firebase函数是异步的,这是造成我问题的原因。
let userkey = sessionName.trimmingCharacters(in: .whitespaces)
ref.child(userkey).child("handyman-orders").observeSingleEvent(of: .value, with: { snapshot in
let enumerator = snapshot.children
while let rest = enumerator.nextObject() as? FIRDataSnapshot {
let newOrder = Orders()
newOrder.service = (rest.childSnapshot(forPath: "Name").value! as? String)!
newOrder.image = (rest.childSnapshot(forPath: "image").value! as? String)!
newOrder.DeliveryType = (rest.childSnapshot(forPath: "DeliveryType").value! as? String)!
newOrder.PickupInfo = (rest.childSnapshot(forPath: "PickupInfo").value! as? String)!
newOrder.address = (rest.childSnapshot(forPath: "address").value! as? String)!
allOrders.append(newOrder)
}
print("handyman orders recieved")
})
ref.child(userkey).child("laundary-orders").observeSingleEvent(of: .value, with: { snapshot in
let enumerator = snapshot.children
while let rest = enumerator.nextObject() as? FIRDataSnapshot {
let newOrder = Orders()
newOrder.service = (rest.childSnapshot(forPath: "Name").value! as? String)!
newOrder.image = (rest.childSnapshot(forPath: "image").value! as? String)!
newOrder.DeliveryType = (rest.childSnapshot(forPath: "DeliveryType").value! as? String)!
newOrder.PickupInfo = (rest.childSnapshot(forPath: "PickupInfo").value! as? String)!
newOrder.address = (rest.childSnapshot(forPath: "address").value! as? String)!
allOrders.append(newOrder)
print("while laundary getorders",allOrders)
}
print("Laudanry orders recieved")
})
refreshControl.endRefreshing()
ref.removeAllObservers()
}
我的刷新表函数是
func refreshtable(_ sender: AnyObject) {
allOrders.removeAll(keepingCapacity: false)
getAllOrders()
self.tableView.reloadData()
}
有人有什么想法吗? 我将非常感激。 感谢