ios - 如何使用操作查询发出多个 Alamofire 请求

标签 ios swift alamofire nsoperationqueue

我有一个使用 Alamofire 将多张图片上传到服务器的应用程序。每张图片在上传到服务器之前都需要一个上传 token 。因此,在 for 循环中,对于每个图像文件,

  1. I make a get request via Alamofire to get the upload token

  2. After getting the token, I make an upload request via Alamofire, with that token.

这是我的代码:

func uploadFile(image: imageToUpload, onCompletion: @escaping ((Bool) -> Void)) {

   ...//some code
       
   // Alamofire request to get an upload token
   getUploadToken() { uploadToken in 
     
   if uploadToken != nil {
       // Alamofire request to make the upload with uploadToken and image data
       makeUploadRequest(token: uploadToken, image: imageToUpload) { uploadResponse in 
              onCompletion(uploadResponse)
       }
   }
}

这是我的 for 循环,用于遍历要上传的图像:

DispatchQueue.global(qos: .background).async {
    let group = DispatchGroup()
    for fileToUpload in filesToUpload {
        group.enter()
        FileOperations.shared.uploadFile(image: fileToUpload) { hasFinished in
            if hasFinished {
                group.leave()
            }
        }
        group.wait()
    }
}

所以我需要使用队列来实现这个。我的代码需要像这样工作:

  1. Queue 1: getUploadToken request for image 1.
  2. Queue 2: makeUploadRequest for image 1.
  3. Queue 3: getUploadToken request for image 2.
  4. Queue 4: makeUploadRequest for image 2.

... and so on.

所以只有在for循环中的image 1完成它的整个过程之后,image 2才能开始它的过程。使用队列,即使应用程序在后台运行,它也应该可以运行。

如何使用队列实现这种行为?

我可以使用 DispatchGroup() 来完成这项工作,但是当应用程序后台运行时它不起作用。我研究并阅读了互联网上的所有内容,但似乎没有任何效果。所以我想让它与队列一起工作。任何帮助将不胜感激。

最佳答案

你是对的,你可以用OperationQueue来做到这一点,你需要做的就是子类化Operation来配置它来执行你想要的操作并初始化OperationQueue 并将其配置为在后台线程上运行并且只允许一个并发任务。然后,按照您想要的顺序将操作添加到队列中,它们将开始执行。

关于ios - 如何使用操作查询发出多个 Alamofire 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55709744/

相关文章:

iphone - iphone 模拟器和设备之间的屏幕标签颜色不同?

ios - 使用airplay播放音频时如何减少截止?

ios - 如何最好地将巨大的 .sqlite 数据库移动到旧的低内存 iOS 设备上的新目录?

ios - libobjc.A.dylib 在 Crashlytics 中崩溃

swift - 我如何让 Alamofire 对此网址进行编码 - 它不断丢弃参数

swift - 如何将 JSON 数组与 Alamofire 参数一起使用?

iOS - 从 AppDelegate 监控应用程序流

ios - 在 Swift 3 词典中对数组值进行排序

ios - 将 JSON 结果传递给第二个 Web 服务以使用 Alamofire Swift 获得最终结果

ios - Swift:从 stackView 中消失 View