簡體   English   中英

RxAlamofire取消網絡請求

[英]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.

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