繁体   English   中英

Swift:链接多个网络请求,Alamofire

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM