2017-12-13 21 views
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) 
} 

답변

0

사용 .switchLatest() -

let responseSubject: PublishSubject<Observable<Response>> = PublishSubject() 
    let latestResponse: Observable<Response> = responseSubject.switchLatest() // subscribe to it 
    // call 'responseSubject.onNext(newRequestObservable)' whenever you need a new request