我有一个项目,我正在使用带有RxSwift扩展的Moya . 简单的用例工作正常,我能够以Observables的形式提出请求并获得响应 .
public func test() -> Observable<Response> {
return provider
.request(.test)
.retry(5)
}
然后我可以订阅observable并打印响应没有问题 .
但现在我需要处理身份验证逻辑 . 它的工作方式是我使用添加为HTTP标头字段的标记运行上述请求 . Moya允许我通过在endpointClosure中使用endpointByAddingHTTPHeaderFields来透明地实现这一点 . 到目前为止没问题 .
当请求以HTTP状态401失败时,会出现问题,这意味着我需要通过调用另一个 endpoints 来重新进行身份验证
provider.request(.auth(user, pass)).retry(5)
这将返回另一个Observable,我可以轻松映射到JSON以获取新令牌 .
然后我只需再次调用test()!
So my question is... 如何在上面的test()函数中添加此认证逻辑,以便test()返回的Observable已经保证在发生故障时运行重新认证逻辑,并且是第二次重新认证的结果请求 .
我对RXSwift和RX一般都很新,所以我对我用来做这个的操作员有点无能为力 .
谢谢!
1 回答
catchError允许使用另一个observable继续执行observable的执行 . 我们在此定义的observable执行以下操作:
首先,它将请求
.auth
endpoints .然后从响应中读取以获取新的身份验证令牌
最后,我们递归调用
test(with authToken: String)
重试查询测试点 .