使用RxSwift 3.6.1我对ObservableType进行了此扩展,以便在出现错误请求后获取新标记:
public extension ObservableType where E == Response {
public func retryWithToken() -> Observable<E> {
return retryWhen { error -> Observable<Response> in
return error.flatMap({ (error) -> Observable<Response> in
if let myApiError: MyApiError = error as? MyApiError {
if (myApiError == MyApiError.tokenError) {
return Session.shared.myProvider.request(.generateToken)
} else {
return Observable.error(myApiError)
}
}
return Observable.error(error)
})
}
}
}
然后我可以使用它:
Session.shared.myProvider.rx
.request(.mySampleRequest)
.filterSuccessfulStatusCodes()
.retryWithToken()
.subscribe { event in
....
}.disposed(by: self.disposeBag)
但是现在使用RxSwift 4.0.0序列期望a
PrimitiveSequence<SingleTrait, Response>
有人可以向我解释如何使用RxSwift 4.0.0做同样的事情吗?我尝试使用PrimitiveSequence的扩展,但我有一些编译错误。
答案 0 :(得分:3)
我认为这与RxSwift
无关,而是Moya
更改。 MoyaProvider.rx.request
会返回Single
,PrimitiveSequence
这是ObservableType
的{{1}}的类型。
您在ObservableType
上声明了您的功能。
所以只需在asObservable()
retryWithToken()