在Firestore Clouser中传递对象/转义

时间:2019-02-02 03:40:03

标签: ios swift multithreading firebase google-cloud-firestore

func snapshotHourlyJobDriverAssignedRoute(driver: Driver, driver_id: String, daily_job_id: String, handler: @escaping (DriverAssignedHourlyJob, Driver) -> ()) {
    //takes a few seconds to run
    reference(collectionReference: .drivers_assigned_hourly).document(driver_id).collection(DataCollectionReference.daily_jobs.rawValue).document(daily_job_id).addSnapshotListener { (snapshot, error) in

        if let error = error {
            print("DEVELOPER ERROR: \(error.localizedDescription)")
            return
        }

        guard let documentData = snapshot?.data() else { return }

        //populate my driver object...

        handler(driverHourlyJobRoute, driver)

    }
}

我在上面的代码中遇到了问题,我第一次传递的驱动程序变量与我的处理程序返回的驱动程序变量不同。我试过将函数的主体放在同步块中,但是由于firestore调用位于不同的线程中,因此无法正确同步。我还尝试在数据库调用之前等待一秒钟,但是它没有用。

现在,如果我调用函数五次,它将仅返回最后一个调用,而前四个将丢失。我的目标是返回每个电话。

0 个答案:

没有答案