У меня есть три функции getNewOrder()
, storeOrderDetails(_ details:[String:String])
и getUserInfo(_ userID:String)
.
- Функция
getNewOrder()
вызывается первой. Он выбирает новые заказы (значения .childAdded) и отправляет словарь на storeOrderDetails(_ details:[String:String])
.
- storeOrderDetails (_ подробности: [String: String])
then segregate all the values and calls
getUserInfo (_ userID: String) `передав его userID, который присутствовал в его деталях.
getUserInfo(_ userID:String)
затем извлекает данные пользователя и возвращает пользователя
Информация.
Однако проблема в том, что [userInfo = getUserInfo(_ userID:String)
in storeOrderDetails(_ details:[String:String])
] userInfo всегда пусто. Очевидно, func getUserInfo(_ userID:String)
входит в блок завершения после того, как вернул пустое значение.
Я хочу, чтобы эти три функции выполнялись последовательно.
Любой совет высоко ценится.
Пожалуйста, следуйте ссылкам ниже, чтобы просмотреть мой код.
https://imgur.com/hNjvyDk
https://imgur.com/J0LMXMg
func childAdded(){
let ref = Database.database().reference().child("Orders").child(todaysDate)
ref.observe(.childAdded) { (snapshot) in
var details = [String:String]()
if let orderID = snapshot.key as? String {
ref.child(orderID).observeSingleEvent(of: .value, with: { (snap) in
self.newOrderTextView.text = ""
self.customerNameLabel.text = ""
self.customerPhoneLabel.text = ""
self.orderNumberLabel.text = ""
let enumerator = snap.children
while let rest = enumerator.nextObject() as? DataSnapshot {
details[rest.key as? String ?? ""] = rest.value as? String ?? ""
}
self.storeUserDetails(details)
})
}
}
}
func storeUserDetails(_ details:[String:String]){
if details["CustomerID"] != nil {
userInfo = getUserDetails(details["CustomerID"]!)
print(userInfo)
}
if !userInfo.isEmpty{
let order = OrderDatabase()
order.customerEmail = userInfo["Email"]!
order.customerName = userInfo["Name"]!
order.orderAcceptStatus = details["OrderStatus"]!
order.customerOrderNumber = details["orderNumber"]!
order.orderID = details["orderID"]!
order.time = details["Time"]!
order.customerFirebaseID = details["CustomerID"]!
self.orderDatabase[details["orderNumber"]!] = order
self.orderTable.reloadData()
}
}
func getUserDetails(_ userID:String) -> [String:String]{
var details = [String:String]()
let userDetailsReference = Database.database().reference().child("Users")
userDetailsReference.child(userID).observeSingleEvent(of: DataEventType.value, with: { (snapshot) in
if let dictionary = snapshot.value as? NSDictionary {
self.customerNameLabel.text = dictionary.value(forKey: "Name") as? String
self.customerPhoneLabel.text = dictionary.value(forKey: "Email") as? String
details["Name"] = dictionary.value(forKey: "Name") as? String
details["Email"] = dictionary.value(forKey: "Email") as? String
}
})
return details
}