【发布时间】:2019-10-14 01:26:59
【问题描述】:
RxSwift 再问一个关于错误处理的问题:
我正在以这种方式使用 Alamofire+RxAlamofire:
SessionManager.default.rx.responseJSON(.post, url, parameters:params)
示例:
func login() -> Observable<Int> {
let urlString = ...
let params = ...
return SessionManager.default.rx.responseJSON(.post, url, parameters:params)
.rxJsonDefaultResponse()
.map({ (data) in
data["clientId"] as! Int
})
}
....
extension ObservableType where Element == (HTTPURLResponse, Any) {
func rxJsonDefaultResponse() -> Observable<Dictionary<String, Any>> {
return self.asObservable().map { data -> Dictionary<String, Any> in
if... //error chechings
throw NSError(domain: ..,
code: ...,
userInfo: ...)
}
...
return json
}
}
}
使用:
loginBtn.rx.tap
.flatMap{ _ in
provider.login()
}.subscribe(onNext: { id in
...
}, onError: { (er) in
ErrorPresentationHelper.showErrorAlert(for: er)
})
.disposed(by: bag)
因此,如果发生错误,一切都会按预期工作:错误警报显示并已处理“loginBtn.rx.tap”,但我需要它仍然存在,如果我想使用 onError 块,我的策略是什么?
【问题讨论】: