【问题标题】:Call request by request Alamofire swift按请求调用请求 Alamofire swift
【发布时间】:2020-07-23 13:59:04
【问题描述】:

我想知道如何让请求一个一个地执行。这是关于图像处理的。并且服务器不能处理多个图像。问题是我需要一次发送10张图片,如果我一次发送所有图片,我会遇到超时问题,现在我对如何在前一个响应到达时发送下一个请求感兴趣?

func clearingImage() {
    if clearingImageArray.count < 0 || indexOfClearImage >= clearingImageArray.count
    {
        guard let imageName = ImageFilenameUtilities.getNameOfImageFromPath(filePath: clearingImageArray[indexOfClearImage]) else
        {
            indexOfClearImage+=1
            clearingImage()
            return
         }
        guard let clearType = ImageFilenameUtilities.getClearTypeFromFilename(filename: imageName) else
        {
            indexOfClearImage+=1
            clearingImage()
            return
        }
        guard let image = gallery?.getImageForPath(path: clearingImageArray[indexOfClearImage]) else
        {
            indexOfClearImage+=1
            clearingImage()
            return
        }
                   sendImageToServer(image: image, imageName: imageName)
    }
}
func sendImageToServer(image:UIImage,imageName:String)
    {
        let url = "example.com"
     let headers : HTTPHeaders = [
            "Connection": "Keep-Alive"
            // "Content-Type": "application/x-www-form-urlencoded"
        ]
        let manager = Alamofire.SessionManager.default
        manager.session.configuration.timeoutIntervalForRequest = 12000
        manager.session.configuration.timeoutIntervalForResource = 12000
        
        manager.upload(multipartFormData: { multipleData in
            for (key, value) in parameter {
                multipleData.append(value.data(using: String.Encoding.utf8)!, withName: key)
            }
            multipleData.append(
                imageData, withName: "image", fileName: imageName, mimeType: "image/jpg")}, to: url, method: .post, headers: headers){
                    (result) in
                    switch result {
                        
                    case .success(let upload, _, _):
                        upload.responseJSON { response in
                            self.indexOfClearImage += 1
                            if let image = UIImage(data: response.data!) {
                                //save image to galery
                            }
                            else
                            {
                                if let error = response.result.error {
                                    if error._code == NSURLErrorTimedOut {
                                    self.indexOfClearImage -= 1
                                    }
                                }
                                
                            }
                        }
                    case .failure(let encodingError):
                        //send next image to server
                        self.indexOfClearImage += 1
                    }
           }
            self.clearingImage()
        }

【问题讨论】:

  • 发送一个请求(并获得响应)的代码是什么样的?
  • @PhillipMills 现在我递归调用但我不知道我有什么更好更优雅的方式

标签: swift alamofire


【解决方案1】:

只需在第一个完成块发送第二个请求,当您收到响应时,等等。

func firstRequest() {
    AF.request("url/here").response { response in
        self.secondRequest()
    }
}

func secondRequest() {
    AF.request("url/here").response { response in
        // call 3rd request and so on...
    }
}

【讨论】:

  • 是的,但我不知道我有多少张照片。我可以有 1-2-30
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 2020-04-12
  • 1970-01-01
相关资源
最近更新 更多