gpt4 book ai didi

rx-swift - 在 RxSwift 4.0.0 中正确使用 retryWhen 运算符

转载 作者:行者123 更新时间:2023-12-02 14:41:45 24 4
gpt4 key购买 nike

使用 RxSwift 3.6.1,我对 ObservableType 进行了扩展,以在错误请求后获取新 token :

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 现在序列期望 PrimitiveSequence<SingleTrait, Response>

有人可以向我解释如何使用 RxSwift 4.0.0 做同样的事情吗?我尝试使用 PrimitiveSequence 的扩展,但出现一些编译错误。

最佳答案

我认为这与 RxSwift 无关,而是 Moya 的改变。 MoyaProvider.rx.request 返回 Single,它是 PrimitiveSequence 的类型别名,而不是 ObservableType

您在 ObservableType 上声明您的函数。

所以只需在 retryWithToken() 之前执行 asObservable()

关于rx-swift - 在 RxSwift 4.0.0 中正确使用 retryWhen 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48558208/

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