簡體   English   中英

取消請求 Alamofire

[英]Cancel a request Alamofire

我正在發送一個基於計時器觸發的請求。 但是,如果我按下后退按鈕,請求似乎仍然處於活動狀態,而響應又會導致應用程序崩潰。 請提出一種取消請求的方法。

使用 Xcode 8.2.1 Swift 3

這是示例請求:

Alamofire.request(path!, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: createHeader()).responseJSON {
    response in
    switch response.result {
    case .success(let data):
        success(data as AnyObject?)
    case .failure(let error) :
        failure(error as NSError)
    }
}

甚至嘗試使 viewDidDisappear 上的計時器無效,但無濟於事。

謝謝 !!

阿拉莫菲爾 4 / Swift 3 / Xcode 8

您可以取消單個請求,如下所示:

1 - 首先獲取請求:

let request = Alamofire.SessionManager.default.request(path!, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: createHeader()).responseJSON { response in
    switch response.result {
    case .success(let data):
        success(data as AnyObject?)
    case .failure(let error) :
        failure(error as NSError)
    }
}

2 - 然后,在您的viewDidDisappear 中,只需調用:

request.cancel()


您可以取消所有請求,如下所示:

Alamofire.SessionManager.default.session.getTasksWithCompletionHandler { (sessionDataTask, uploadData, downloadData) in
    sessionDataTask.forEach { $0.cancel() }
    uploadData.forEach { $0.cancel() }
    downloadData.forEach { $0.cancel() }
}

您是否嘗試過解決方案:

let sessionManager = Alamofire.SessionManager.default 
sessionManager.session.getTasksWithCompletionHandler { dataTasks, uploadTasks, downloadTasks in 
dataTasks.forEach { $0.cancel() } 
uploadTasks.forEach { $0.cancel() } 
downloadTasks.forEach { $0.cancel() } 
}

我還添加了一個檢查來驗證這是否是我要取消的請求:

dataTasks.forEach
            {
                if ($0.originalRequest?.url?.absoluteString == url)
                {
                    $0.cancel()
                }
            }

快速 5

Alamofire.Session.default.session.getTasksWithCompletionHandler({ dataTasks, uploadTasks, downloadTasks in
            dataTasks.forEach { $0.cancel() }
            uploadTasks.forEach { $0.cancel() }
            downloadTasks.forEach { $0.cancel() }
        })

這個怎么樣:

manager.session.invalidateAndCancel()

如果它對任何人有幫助,就我而言,我在 SessionManager 上有一個 RequestRetrier,它在取消后重試請求,所以一定要檢查那里!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM