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

基于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.kler.cn/a/541474.html

相关文章:

  • Linux ftrace 内核跟踪入门
  • 基于机器学习时序库pmdarima实现时序预测
  • C# 封送和远程编程介绍
  • Neo4j图数据库学习(二)——SpringBoot整合Neo4j
  • python 语音识别方案对比
  • Flink (十七) :Table API SQL (五) 时区
  • kotlin的扩展函数介绍
  • MySQL中DDL操作是否支持事务
  • STM32 HAL库 UART通讯(C语言)
  • 从输入网址到网页显示期间发生了什么?
  • Redis中的某一热点数据缓存过期了,此时有大量请求访问怎么办?
  • 自动化xpath定位元素(附几款浏览器xpath插件)
  • ffmpeg -muxers
  • ARM RFEIA指令作用
  • 力扣 零钱兑换
  • DeepSeek全球第二,R1生态扩展,华为荣耀接入,OpenAI推出深度研究,谷歌Gemini 2.0发布!AI Weekly 2.3-2.9
  • ASP.NET Core SignalR案例:导入英汉词典
  • CNN-LSTM卷积神经网络长短期记忆神经网络多变量多步预测,光伏功率预测
  • 【Rust中级教程】1.3. 内存 Pt.1:各类概念的定义及变量的高级模型和低级模型
  • Node.js调用DeepSeek Api 实现本地智能聊天的简单应用
  • 访问修饰符(C#)
  • DeepSeek接口联调(postman版)
  • 在 C++ 中使用 Protocol Buffers(protobuf)
  • ESLint 如何处理 ES6+ 语法
  • excel LOOKUP
  • Git 分布式版本控制工具使用教程