当前位置: 首页 > news >正文

基于Kotlin中Flow扩展重试方法

在这里插入图片描述
最近项目中统一采用Kotlin的Flow来重构了网络请求相关代码。
目前的场景是,接口在请求的时候需要一个accessToken值,因为此值会过期或者不存在,需要刷新,因此最终方案是在使用Flow请求的时候先获取accessToken值然后再进行接口请求,而获取accessToken值的方法已经封装成了一个Flow并且做了缓存,因此最后需要使用flatMapConcat操作符来连接真正需要的接口请求,如果获取的accessToken无效,又需要回头重新执行,逻辑如下:

  1. 判断本地是否存在accessToken并且是否过期,不存在或者已过期则请求accessToken
  2. 请求对应的接口
  3. 如果返回结果中accessToken无效,则重试

Flow提供了retryretryWhen两种扩展方法来做重试操作:

retry源码

public fun <T> Flow<T>.retry(retries: Long = Long.MAX_VALUE,predicate: suspend (cause: Throwable) -> Boolean = { true }
): Flow<T> {require(retries > 0) { "Expected positive amount of retries, but had $retries" }return retryWhen { cause, attempt -> attempt < retries && predicate(cause

http://www.mrgr.cn/news/90237.html

相关文章:

  • 读书笔记《左耳听风》
  • 【shellbash进阶系列】(四)SHELL脚本--变量(基础)
  • Maven入门核心知识点总结
  • 【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面
  • aio-pika 快速上手(Python 异步 RabbitMQ 客户端)
  • Stability AI 联合 UIUC 提出单视图 3D 重建方法SPAR3D,可0.7秒完成重建并支持交互式用户编辑。
  • 【HarmonyOS Next 自定义可拖拽image】
  • 【生产变更】- 12c及以后 ADG主备切换
  • 2.10学习总结
  • 从零复现DeepSeek R1:从V3中对MoE、MLA、MTP的实现,到Open R1对R1中SFT、GRPO的实现
  • 【Java】多线程和高并发编程(四):阻塞队列(上)基础概念、ArrayBlockingQueue
  • Vue.js 状态管理库Pinia
  • C++类和对象进阶:构造函数和析构函数详解
  • linux部署node服务
  • 使用ThreeJS实现的宇宙大爆炸3D粒子特效思路,原理和关键代码解析
  • 达梦数据库(DM)线程管理
  • 【Java】多线程和高并发编程(三):锁(中)深入ReentrantLock
  • C++ STL汇总
  • C++智能指针的使用
  • 移动(新)魔百盒刷机教程[M301A_YS]
  • SpringSecurity:授权服务器与客户端应用(入门案例)
  • 9 数据流图
  • Linux: ASoC 声卡硬件参数的设置过程简析
  • KITE提示词框架:引导大语言模型的高效新工具
  • 【故障处理】 - 12C ADG备库密码文件的MD5值不断变化
  • 51c自动驾驶~合集49