Finish asynchronous task in Firebase with Swift

后端 未结 2 1601
闹比i
闹比i 2020-12-07 00:30

I am trying to write a function that will return an array of all my workers, but it is returning before retrieving the data from firebase

here is my code:

2条回答
  •  我在风中等你
    2020-12-07 00:56

    This is not tested... I just coded it up on the fly to give you the general idea

    add a completion block/callback to your function...

    func getWorkersList(callback: ((data:[Worker]) ->Void )) {
        let workersInfoRef = ref.childByAppendingPath("countries/\(userCountry)/cities/\(userCity)/workers/\(workFieldToRecieve)/")
    
        var workerList = [Worker]()
        workersInfoRef.queryOrderedByChild("name")
           .observeSingleEventOfType(.Value, withBlock: { (snapshot) in
    
            print(snapshot.childrenCount)
            for rest in snapshot.children.allObjects as! [FDataSnapshot]{
    
                let workerInfo = Worker(uid: rest.value["uid"] as! String, name: rest.value["name"] as! String, city: rest.value["city"] as! String, profession: rest.value["profession"] as! String, phone: rest.value["phone"] as! String, email: rest.value["email"] as! String, country: rest.value["country"] as! String)
                workerList.append(workerInfo)
    
            }
            print(workerList.count)
            callback(workerList)
    
       }) { (error) in  print(error.description) }
    }
    

    pass in the completion block..

    getWorkersList(callback: { (data:[Worker]) -> Void in 
        print(data)
    })
    

提交回复
热议问题