[英]RxAlamofire cancel network request
以下是RxAlamofire網絡請求的示例代碼。 我的問題是,無論何時關閉View Controller,我都想取消此請求。
我試圖將此請求分配給全局變量,但requestJSON
方法返回Observable<(HTTPURLResponse, Any)>
類型。
當View Controller被關閉時,是否有一種方法可以處理此請求?
RxAlamofire.requestJSON(.get, sourceStringURL)
.debug()
.subscribe(onNext: { [weak self] (r, json) in
if let dict = json as? [String: AnyObject] {
let valDict = dict["rates"] as! Dictionary<String, AnyObject>
if let conversionRate = valDict["USD"] as? Float {
self?.toTextField.text = formatter
.string(from: NSNumber(value: conversionRate * fromValue))
}
}
}, onError: { [weak self] (error) in
self?.displayError(error as NSError)
})
.disposed(by: disposeBag)
如果您看一下RxAlamofire的代碼: https : //github.com/RxSwiftCommunity/RxAlamofire/blob/8a4856ddd77910950aa2b0f9e237e0209580503c/Sources/RxAlamofire.swift#L434
您會看到在取消訂閱后該請求被取消。
因此,只要您在解除視圖控制器時釋放它(以及它的處理包!),那么如果請求尚未完成,則該請求將被取消。
正如Valérian指出的那樣,當您的ViewController被關閉時,它將及其所有屬性都被釋放(如果保留計數降至0,則為0)。
特別是,當disposeBag
屬性被釋放時,將對添加到此bag的所有可觀察序列調用dispose()
。 反過來,它將在RxAlamofire實現中調用request.cancel()
。
如果您需要更早取消請求,則可以嘗試直接取消處理disposeBag
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.