我有一个从Firebase加载数据的代码,数据不是立即加载的,我想首先加载数据,然后将数据传递给委托. 为此,我使用了WAIT构造和同步加载数据函数
let dateUser = await loadData(phoneNumber: phoneNumber)
根据这个 idea ,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?)
}
我试图在loadData
函数内部等待,但结果要么出现错误,要么什么都不起作用