我有一个从 firebase 加载数据的代码,数据没有立即加载,我想先加载数据,然后将数据传递给委托。 为此,我使用了 wait 构造和同步 loadData 函数
let dateUser = await loadData(phoneNumber: phoneNumber)
按照思路,dateUser变量应该等到函数返回结果,但是函数没有等到数据加载就立即返回结果
你能告诉我错误是什么吗,我认为你需要在 loadData 函数中等待,但是在哪里?
到处都有如何使用这种构造来加载 Json 文件的示例,但我没有找到它在闭包中的什么地方使用
这里是示例代码
struct LoadData {
let db = Firestore.firestore()
var delegate: LoadDataDelegate?
func getData(phoneNumber:String){
Task.init {
let dateUser = await loadData(phoneNumber: phoneNumber)
print("Делегат получил дату - ", dateUser)
delegate!.loadData(date: dateUser)
}
}
func loadData(phoneNumber: String) async -> TimeInterval? {
var existingUser = false /// Проверка существует ли пользователь с данным номером телефона в базе
var date: TimeInterval?
db.collection("Users").getDocuments { QuerySnapshot, Error in
if let err = Error {
print("Ошибка получения данных - \(err)")
}
for document in QuerySnapshot!.documents {
if document.documentID == phoneNumber { /// Если текущий пользователь уже был зарегестрирован
existingUser = true
date = document["dateFirstLaunch"] as? TimeInterval /// Преобразуем данные из FireBase
print("это дата ",date!)
}
}
if existingUser == false { /// Если такого пользователя не было
print("New User")
db.collection("Users").document(phoneNumber).setData(["dateFirstLaunch" : NSDate().timeIntervalSince1970]) { error in
if let err = error {
print("Ошибка записи данных в обалко - \(err)")
}
}
}
}
return date
}
}
protocol LoadDataDelegate {
func loadData(date: TimeInterval?)
}
我试图在加载数据函数中等待,但结果要么出现错误,要么什么都不起作用