Я создаю функцию для своего приложения, которая позволяет пользователям регистрироваться по электронной почте.Я использую Firebase, и я хотел бы использовать fetchProviders()
из API Firebase.
Это то, что у меня есть:
func submitEmail() {
var errorMessage = [String()]
Auth.auth().fetchProviders(forEmail: email) { (providers, error) in
if let error = error {
print(error.localizedDescription)
} else if let providers = providers {
errorMessage.append("Error - email already in use")
print(errorMessage) // prints "Error - email already in use"
}
}
print(errorMessage) // prints []
if errorMessage.count > 0 {
/* show alert */
}
Теперь моя проблема здесь ясна;Функции обратного вызова выполняются асинхронно , поэтому errorMessage.count
будет равно 0
, когда мы перейдем к оператору if , просто потому, что функция обратного вызова работает в другом потоке.
Требуемое поведение: Я бы хотел, чтобы мой поток пользовательского интерфейса зависал, ожидая, пока не будет вызвана функция обратного вызова, чтобы, если электронное письмо уже было в базе данных, оно могло быть обнаружено.Я хотел бы найти элегантный способ сделать это (не уверен, что хорошая практика в этом случае).Да, я мог бы поставить там таймер, чтобы угадать, когда будет выполнен обратный вызов, но это будет довольно ужасный способ сделать это (поскольку время выполнения этого обратного вызова зависит от соединения с Firebase).