0
API 요청 기능이 있습니다.
나는 서버 데이터를 검색하기위한 searchBar도 가지고있다.
그리고 사용자가 모든 문자를 입력 할 때 이전 요청을 취소하고 싶습니다.
"flatMapLatest"라는 키워드를 검색했습니다. 하지만 "flatMapLatest"를 사용하여 이전 요청을 취소하는 방법을 알지 못합니다.
시도했지만 실패했습니다.
나에게 제안이 있으십니까?
감사합니다. 그런
RxSwift를 사용하여 이전 요청을 취소하는 방법
func requestTest(_ method: Alamofire.HTTPMethod, url:String, params:[String:Any] = [:], callback: @escaping (JSON) -> Void) {
var headers:[String:String] = [String:String]()
if user.token.isEmpty == false {
headers["Authorization"] = "Bearer \(user.token)"
}
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders
configuration.timeoutIntervalForRequest = timeout
_ = SessionManager(configuration: configuration)
.rx.responseJSON(method,
url,
parameters: params,
encoding: ((method == .get) ? URLEncoding.default : JSONEncoding.default),
headers: headers)
.subscribeOn(SerialDispatchQueueScheduler.init(qos: .background))
.flatMapLatest({ (<#(HTTPURLResponse, Any)#>) -> ObservableConvertibleType in
//I fail to get request.
})
.subscribe(onNext: { (r, data) in
let json = JSON(data)
if json["status"].stringValue == "success" {
callback(json["request"])
}
else {
callback(json)
}
}, onError: { (error) in
callback(JSON(error))
})
.addDisposableTo(DisposeBag)
}