【发布时间】:2019-04-19 17:51:22
【问题描述】:
我连续进行多个 api 调用,当我最终推送到下一个视图控制器时,我的核心数据模型中的数据完全空白。在ViewController A,我按此顺序提出了以下请求:
Api.verifyOtp(email, otp).continueWith { (task) -> Any? in
if task.succeed {
self.apiCallOne()
self.apiCallTwo()
self.apiCallThree()
self.apiCallFour()
self.apiCallFive()
} else {
Hud.hide()
task.showError()
}
return nil
}
现在所有这些调用都是异步进行的。但是最后一个方法是self.apiCallFive() 是推送到ViewController B 的方法。这是电话:
Api.apiCallFive().continueOnSuccessWith { (task) -> Any? in
Hud.hide()
if task.succeed {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewB storyboard.instantiateViewController(withIdentifier: "ViewControllerB" self.navigationController?.pushViewController(viewB, animated: true)
}
我的猜测是,由于所有这些请求都是异步发生的,因此无法保证哪个调用将首先完成。所以apiCallFive() 在其他人能够完成之前推送和加载 ViewController B。我怎样才能做到这一点,以便在所有任务完成之前不会加载或推送下一个视图?
谢谢!
【问题讨论】:
-
我猜那些 api 调用也会做一些事情,比如将 api 调用结果写入核心数据?
-
是的,这些都包含在 api 请求中。一旦调用完成检索数据,就会创建一个对象并将其存储到核心数据中。
-
其他 api 调用完成时你会收到通知吗?
-
无论解决方案如何,确保在任何调用失败时都不会永远冻结。