我正在通过制作一个应用来学习Swift
的{{1}},试图解决现实中的用例。
常见的情况是,我正在执行请求,并且auth令牌已过期。如果请求失败并显示401,我想刷新令牌。
类似:
Combine
请记住,这只是伪代码。
我确实尝试了一些事情,但是很混乱。 :)
这怎么办?
谢谢!
答案 0 :(得分:0)
我尝试将其RxSwift版本移植到Combine,但是后者缺少一些关键运算符(retryWhen
和flatMapFirst
)。因此,一种解决方案是将RxCombine和RxSwift引入您的项目,以便可以在项目中使用我的RxSwift解决方案。
RxCombine:https://github.com/freak4pc/RxCombine
RxSwift:https://github.com/ReactiveX/RxSwift
我不希望这个答案是正确的,但是在将必要的运算符添加到Combine之前,这可能是一种变通方法。
答案 1 :(得分:0)
您可以使用tryMap()
在refreshToken
之前引发Error,然后执行retry
。
fetchData()
.tryMap { data, response in
if response.statusCode == 401 {
refreshToken()
.fetchData()
throw __MYERROR__.invalidServerResponse
} else {
return data
}
}
.retry(3)
.keepDoingThings()