[英]Swift: Chain multiple network request, Alamofire
我有一个关于链接更多网络请求(Alamofire)的问题,但请求的数量有时是 4 有时是 9 等,这取决于目标配置。 我有一个仪表板视图控制器,并且 VC 有 4-9 个嵌入式 VC,每个人都必须从 API 获取一些数据,这就是问题所在,所有这些都尝试“同时”获取,但其中很多都失败了,随机。
我使用信号量解决这个问题,但有时请求失败,不知道为什么。 我认为一个请求会阻止另一个请求或类似的请求。
例如,我有:
let dispatchQueue = DispatchQueue.global(qos: .background)
dispatchQueue.async {
if MDUtilites.isMediaPresent() {
let _ = self.fetchMediaList()
self.semaphore.wait()
}
}
我有大约 10 个这样的代码块,func 是:
func fetchMediaList() {
MDApiManager.sharedInstance.fetchMediaList { (dict, status) in
switch (status) {
case .failed(let code, _, let description):
print("failed:")
print(code)
print(description)
self.semaphore.signal()
case .success(_, _ , _):
print("success")
if let data = dict,
let list = data.parseWith(type: MediaBase.self)?.list {
self.newMedia = list
NotificationCenter.default.post(name: Notification.Name(rawValue: MEDIA_UPDATE), object: nil)
// self.mediaListSections = list
// self.getCategories(data: list)
}
self.semaphore.signal()
case .unknown:
print("DEBUG: unknown fetchMediaList")
self.fetchMediaList()
// self.semaphore.signal()
case .error(let aError):
print(aError)
self.semaphore.signal()
}
}
}
有人可以同时通过更多请求帮助解决此问题,信号量有时有效有时无效。
这是代码中的一些错误信号量正常工作
您不需要为您的请求使用semaphore
。 由于您的请求是异步/相互独立执行的,根据请求的类型,执行需要时间。 当它加载到内存中时,你的每个controller
获取这个请求。 在ViewDidLoad()
获取它们。 确保将多个controllers
正确添加到parent
controller
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.