在异步函数上同时获取进度和错误操作

Posted

技术标签:

【中文标题】在异步函数上同时获取进度和错误操作【英文标题】:Get Progress and Error operations with the same time on Async functions 【发布时间】:2018-05-29 06:09:44 【问题描述】:

我在 Home VC 中使用 Alamofire 上传了一个文件。但是在类函数中上传函数。所以我没有得到进度操作。我想我必须编写委托方法。

有人会帮助我吗?

我的问题在 ViewController 中!!!

在 SendPhoto.class 中

class SendPhoto 


    func send() 
        Alamofire.upload(
        multipartFormData:  multipartFormData in
            ...
    ,
        to: "",
        headers:headers,
        encodingCompletion:  encodingResult in
            switch encodingResult 
            case .success(let upload, _, _):
                upload.uploadProgress progress in
                    print(progress.fractionCompleted)

                
                upload.responseJSON  response in

                
            case .failure(let encodingError):
                print("File Upload Error")
                print(encodingError)
            
    )

在 ViewController 中

class HomepageVC: UIViewController .. 

    override func viewDidLoad() 
        super.viewDidLoad()
    


    @IBAction func sendAction(_ sender: Any) 

        SendPhoto().send()

        // I want to keep this function progress and print to a label or etc. !!!
    


【问题讨论】:

您需要分享更多细节(例如一些代码或方案) 【参考方案1】:

但是你的问题没有完成,所以假设

Alamofire 在除多部分请求之外的任何上传请求上返回 UploadRequest 对象

上传请求有属性progress

/// The progress of fetching the response data from the server for the request.
open var progress: Progress  return dataDelegate.progress 

可用于跟踪上传进度

编辑

你必须通过闭包将数据传递给你的视图控制器

这是你的方法

private func uploadAnyThing  (progress:@escaping ((Progress) -> Void) , completed:@escaping ((_ success:Bool,_ error:Error?) -> Void)) 
    Alamofire.upload(multipartFormData:  (data) in

    , to: "test.com")  (result) in
        switch (result) 
        case .success(let request, _, _):
            request.uploadProgress(closure:  (prog) in
                progress(prog)
            )

            request.responseJSON(completionHandler:  (res) in
                completed(true,nil)

            )

        case .failure(let error) :
            completed(false,error)
            break
        
    

你可以得到它

func test () 
    uploadAnyThing(progress:  (progres) in
        print(progres.fractionCompleted)
    )  (success, error) in

    

【讨论】:

以上是关于在异步函数上同时获取进度和错误操作的主要内容,如果未能解决你的问题,请参考以下文章

如果在模板中使用变量获取错误未定义,则异步 vuex 获取操作状态已填充

基于事件的异步编程模式(EAP)

异步编程基于事件的异步编程模式 (EAP)

Redux 和 isFetching 中的顺序异步操作

jquery获取上传进度和取消上传操作

js 封装一个简单的异步API,获取异步操作结果和过程解析