执行身份验证后如何重试请求?

时间:2019-09-22 07:46:52

标签: swift combine

我正在通过制作一个应用来学习Swift的{​​{1}},试图解决现实中的用例。

常见的情况是,我正在执行请求,并且auth令牌已过期。如果请求失败并显示401,我想刷新令牌。

类似:

Combine

请记住,这只是伪代码。

我确实尝试了一些事情,但是很混乱。 :)

这怎么办?

谢谢!

2 个答案:

答案 0 :(得分:0)

我尝试将其RxSwift版本移植到Combine,但是后者缺少一些关键运算符(retryWhenflatMapFirst)。因此,一种解决方案是将RxCombine和RxSwift引入您的项目,以便可以在项目中使用我的RxSwift解决方案。

这是我的实现:https://medium.com/@danielt1263/retrying-a-network-request-despite-having-an-invalid-token-b8b89340d29

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()