菜鸟教程小白 发表于 2022-12-11 22:42:33

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


                                            <p><p>我有一个使用 <em>Alamofire</em> 将多个图像上传到服务器的应用程序。每个图像在上传到服务器之前都需要一个上传 token 。因此,在 for 循环中,对于每个图像文件,</p>
<blockquote>
<ol>
<li><p>I make a get request via Alamofire to get the upload token</p>
</li>
<li><p>After getting the token, I make an upload request via Alamofire, with that token.</p>
</li>
</ol>
</blockquote>
<p>这是我的代码:</p>
<pre><code>func uploadFile(image: imageToUpload, onCompletion: @escaping ((Bool) -&gt; 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)
       }
   }
}
</code></pre>
<p>这是我的 for 循环遍历要上传的图像:</p>
<pre><code>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()
    }
}
</code></pre>
<p>所以我需要使用队列来实现这一点。我的代码需要像这样工作:</p>
<blockquote>
<ol>
<li>Queue 1: getUploadToken request for image 1.</li>
<li>Queue 2: makeUploadRequest for image 1.</li>
<li>Queue 3: getUploadToken request for image 2.</li>
<li>Queue 4: makeUploadRequest for image 2.</li>
</ol>
<p>... and so on.</p>
</blockquote>
<p>所以只有在for循环中的image 1完成了它的整个过程之后,image 2才能开始它的进程。使用队列,即使应用程序是后台的,它也应该可以工作。</p>
<p>如何使用队列实现这种行为?</p>
<p>我可以使用 <code>DispatchGroup()</code> 进行这项工作,但在应用程序后台运行时它不起作用。我研究并阅读了互联网上的所有内容,但似乎没有任何效果。所以我想用队列来完成这项工作。任何帮助将不胜感激。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>你是对的,你可以使用 <code>OperationQueue</code> 来做到这一点,你需要做的只是子类 <code>Operation</code> 来配置它来执行你想要的操作并初始化<code>OperationQueue</code> 并将其配置为在后台线程上运行并且只允许一个并发任务。然后,按您想要的顺序将操作添加到队列中,它们将开始执行。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何使用操作查询发出多个 Alamofire 请求,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/55709744/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/55709744/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何使用操作查询发出多个 Alamofire 请求