Reputation: 324
I have a code that allows fetching data on firebase. I need to wait until the request has been satisfied to execute the next operation.
I have tried something like this:
var a = [String : Any]()
let group = DispatchGroup()
group.enter()
DispatchQueue.main.async {
dbRef.child("results/users").observeSingleEvent(of: .value) { (snapshot) in
if let res = snapshot.value as? [String:Any] {
a = res
}
}
}
group.notify(queue: .main) {
print(a)
}
But it does not work: I expected that this displays the value of a. (The code used to retrieve data from firebase works.) Instead, nothing is displayed.
Does somebody have an idea? Thank you
Upvotes: 2
Views: 68
Reputation: 91
You can solve it with this:
var a: [String:Any]
func myFunction(completion:@escaping (Bool) -> () ) {
DispatchQueue.main.async {
dbRef.child("results/users").observeSingleEvent(of: .value) { (snapshot) in
if let res = snapshot.value as? [String:Any] {
a = res
}
}
}
myFunction { (status) in
if status {
print(a!)
}
}
Upvotes: 2