gpt4 book ai didi

ios - 如何使用RxSwift取消之前的请求

转载 作者:行者123 更新时间:2023-11-30 11:56:14 25 4
gpt4 key购买 nike

我有一个获取API请求的功能。
我还有一个搜索栏来搜索服务器数据。
我想在用户输入每个字符时取消之前的请求。
我搜索关键字“flatMapLatest”。但我不知道如何使用“flatMapLatest”来取消我的情况下以前的请求。
我尝试过,但失败了。
对我有什么建议吗?
谢谢。

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)
}

最佳答案

使用.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

关于ios - 如何使用RxSwift取消之前的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47786712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com