You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试时Dio发起重复请求问题排查与解决

解决调试时Dio重复发起请求的问题

1. 修复Dio实例创建方式(核心问题)

你当前通过getter每次调用都会新建Dio实例,调试时单步执行可能多次触发这个getter,导致多个Dio实例各自发起请求。改成单例模式,确保全局只有一个Dio实例:

// 只初始化一次Dio实例
final Dio _dio = Dio(BaseOptions(
        baseUrl:
            '${getIt<ConfigReader>().baseURL}${getIt<ConfigReader>().apiPath}',
        contentType: Headers.jsonContentType,
        responseType: ResponseType.json,
        headers: {
          'Accept': Headers.jsonContentType,
        },
      ))
        ..interceptors.add(LogInterceptor());

// 全局复用同一个实例
Dio get dio => _dio;

2. 检查请求触发逻辑

调试时的断点暂停可能导致代码逻辑重复触发请求:

  • 确认请求调用是否在按钮点击、initState/didChangeDependencies等生命周期方法中,调试暂停后是否触发这些方法重复执行
  • 检查是否有防抖/节流逻辑,调试时是否绕过了这些限制导致重复调用

3. 排查隐式重试机制

虽然你只添加了LogInterceptor,但可以排查以下可能:

  • 临时调大Dio的connectTimeout和receiveTimeout值,避免调试断点导致超时触发底层网络重试
  • 检查系统层面是否有HTTP请求重试的全局配置

4. 追踪请求发起实例

在请求调用处添加日志,打印Dio实例的hashCode,确认是否是同一实例发起的多请求:

print("请求发起实例hash: ${dio.hashCode}");
dio.post('/auth').then(...);

如果调试时打印多个不同hash值,说明还是实例重复创建的问题,回到步骤1彻底修复。

内容的提问来源于stack exchange,提问作者Ariel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 14:15:36