Rx swift 使用RxSwift 4.0.0正确使用retryWhen运算符
使用RxSwift 3.6.1,我对ObservableType进行了此扩展,以便在错误请求后获得一个新令牌:Rx swift 使用RxSwift 4.0.0正确使用retryWhen运算符,rx-swift,moya,Rx Swift,Moya,使用RxSwift 3.6.1,我对ObservableType进行了此扩展,以便在错误请求后获得一个新令牌: public extension ObservableType where E == Response { public func retryWithToken() -> Observable<E> { return retryWhen { error -> Observable<Response> in
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)
})
}
}
}
但是现在使用RxSwift 4.0.0,序列预期
PrimitiveSequence
有人可以向我解释如何使用RxSwift 4.0.0实现同样的功能吗?我尝试对PrimitiveSequence进行扩展,但我有一些编译错误。我认为这与
RxSwift
无关,但却是Moya
的变化MoyaProvider.rx.request
返回Single
,它是PrimitiveSequence
的类型别名,而不是observeType
您可以在可观察类型
上声明函数
因此,只需在retryWithToken()之前执行asObservable()
Session.shared.myProvider.rx
.request(.mySampleRequest)
.filterSuccessfulStatusCodes()
.retryWithToken()
.subscribe { event in
....
}.disposed(by: self.disposeBag)