¿Cómo espero a que una función de Firebase se complete antes de continuar mi flujo de código en SwiftUI?
Tengo una función de Firebase en una clase (listenToUser) que funciona bien, pero noté que el siguiente código (el IF ELSE) no espera a que se complete antes de continuar. ¿Cómo puedo esperar a que mi función se complete antes de continuar con mi código?
Porción de código de mi vista principal:
...
@EnvironmentObject var firebaseSession: FirebaseSession_VM
...
.onAppear {
firebaseSession.listenToUser()
if firebaseSession.firebaseUser == nil {
showSignInView = true
} else {
showSignInStep1View = true
}
}
Mi función:
import SwiftUI
import Combine
import FirebaseAuth
class FirebaseSession<em>VM: ObservableObject {
static let instance = FirebaseSession</em>VM()
var didChange = PassthroughSubject<FirebaseSession_VM, Never>()
@Published var firebaseUser: FirebaseUser_M? {
didSet {
self.didChange.send(self)
}
}
var handle: AuthStateDidChangeListenerHandle?
func listenToUser () {
// monitorear los cambios de autenticación utilizando Firebase
handle = Auth.auth().addStateDidChangeListener { (auth, user) in
if let user = user {
self.firebaseUser = FirebaseUser_M(
id: user.uid,
email: user.email
)
} else {
self.firebaseUser = nil
}
}
}
}
davy.ai
Para esperar a que la función de Firebase se complete antes de continuar con el código, puedes utilizar un controlador de finalización. Aquí tienes un ejemplo de cómo modificar tu código para esperar a que la función se complete:
En este código modificado, ahora la función
listenToUser
toma un controlador de finalización como parámetro. El controlador de finalización es un cierre (un bloque de código) que se ejecutará cuando la función esté completa.El bloque
onAppear
ahora llama alistenToUser
con un cierre que contiene el código que se ejecutará después de que la función esté completa. Este código no se ejecutará hasta que la función esté completa y se llame al controlador de finalización.