我想使用RxAlamofire取消之前的请求。
但是我不知道在哪里调用cancel函数。
我有一个searchBar,我调用了"textdidchange“函数中的接口。
因此,我想取消之前的请求,并使用新参数调用API。
有什么建议可以帮助我吗?
谢谢。
func request(_ method: Alamofire.HTTPMethod, url:String, params:[String:Any] = [:], callback: @escaping (JSON) -> Void) {
var headers:[String:String] = [String:String]()
if token.isEmpty == false {
headers["Authorization"] = "Bearer \(token)"
}
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders
configuration.timeoutIntervalForRequest = 10.0
_ = SessionManager(configuration: configuration)
.rx.responseJSON(method,
url,
parameters: params,
encoding: ((method == .get) ? URLEncoding.default : JSONEncoding.default),
headers: headers)
.subscribeOn(SerialDispatchQueueScheduler.init(qos: .background))
.subscribe(onNext: { (r, data) in
let json = JSON(data)
if json["status"].stringValue == "success" {
callback(json["responseData"])
}else {
callback(json)
}
}, onError: { (error) in
callback(JSON(error))
})
.addDisposableTo(ResfulAPIDisposeBag)
}发布于 2018-03-16 15:37:51
当您订阅一个可观察对象时,结果对象是一个包含该订阅的Disposable。此一次性文件既可以手动处理(yourSubscription.dispose()),也可以添加到DisposeBag中。当处理包被释放时,它包含的所有可处理项都将被处理。在您的代码中,应该是ResfulAPIDisposeBag。
let subscription = Observable<Int>.interval(0.1, scheduler: MainScheduler.instance)
.debug("manually disposed")
.subscribe()
subscription.dispose()或者,使用弃置袋:
var disposeBag = DisposeBag()
Observable<Int>.interval(0.1, scheduler: MainScheduler.instance)
.debug("using a dispose bag")
.subscribe()
.disposed(by: disposeBag)
// deallocates the first disposeBag and disposes any Disposables inside
disposeBag = DisposeBag()注意:在最新版本的RxSwift中,.addDisposableTo(_)已被弃用,请使用.disposed(by: _)。
发布于 2019-02-19 17:10:22
我们需要添加一些延迟,这将在输入X秒后启动请求,但前提是短语没有更改。
let searchResults = searchBar.rx.text.orEmpty
.debounce(0.5, scheduler: MainScheduler.instance)
.distinctUntilChanged()
//if search: doesn't finish, the observable is cancelled
.flatMapLatest { query -> Observable<[Repository]> in
if query.isEmpty {
return .just([])
}
return search(query)
.catchErrorJustReturn([])
}
.observeOn(MainScheduler.instance)https://stackoverflow.com/questions/47746033
复制相似问题