Reputation:
I'm trying to fill an array when fetching users from Firebase. When I set a breakpoint, I can see, that all users are appended to the array, but when the debugger is done, the array is empty again.
func firebaseRequest(completionHandler: @escaping (Result<[User], Error>) -> Void) {
var tempFirebaseUsers = [User]()
self.firebaseFunctions.fetchUsers { (userFB, error) in
if let user = userFB {
print("User: ", user)
tempFirebaseUsers.append(user)
} else if let error = error{
completionHandler(.failure(error))
return
}
}
completionHandler(.success(tempFirebaseUsers))
return
}
Upvotes: 0
Views: 417
Reputation: 600126
You're calling your completion handler too early. When your completionHandler(.success(tempFirebaseUsers))
runs, the tempFirebaseUsers.append(user)
hasn't run yet.
To fix this, move the call to the completion handler into the callback:
func firebaseRequest(completionHandler: @escaping (Result<[User], Error>) -> Void) {
var tempFirebaseUsers = [User]()
self.firebaseFunctions.fetchUsers { (userFB, error) in
if let user = userFB {
print("User: ", user)
tempFirebaseUsers.append(user)
completionHandler(.success(tempFirebaseUsers))
} else if let error = error{
completionHandler(.failure(error))
return
}
}
return
}
Upvotes: 1