我知道有几个具有类似结构的问题,但我真的很难让我的代码调用检索 Firestore 数据的方法,等到异步函数完成后再返回。
目前我有调用 的父函数getPledgesInProgress,该方法从 firebase 检索数据。初始化父级时会调用此方法。
@State var pledgesInProgress = [Pledge]()
var pledgePicked: Pledge?
var body: some View {
VStack{
//LOTS OF CODE HERE WHICH ISN'T RELEVANT
}
func initVars(){
pledgesInProgress = getPledgesInProgress(pledgePicked: pledgePicked ?? emptyPledge)
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于,pledgesInProgress 变量使用空数组进行初始化,因为父级不会等到被调用函数完成获取 Firestore 文档后再继续。
func getPledgesInProgress(pledgePicked: Pledge)-> [Pledge]{
let db = Firestore.firestore()
var pledgesToReturn = [Pledge]() //INITIALISED AS EMPTY
db.collection("Pledges")
.getDocuments { (snapshot, error) in
guard let snapshot = snapshot, error == nil else {
//handle error
return
} …Run Code Online (Sandbox Code Playgroud)