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

Dart中重复await传入的Future方法不重新执行的解决办法

问题与解决

你的问题核心是Future对象是一次性的:当你第一次await MyMethod时,这个Future已经执行完成并缓存了结果,后续再await它只会直接返回缓存值,不会重新触发DIO请求。

要解决这个问题,你需要把参数从Future<MyResultClass>改为返回Future的函数,这样每次调用函数都会生成一个新的Future,从而发起新的请求。

修改后的伪代码如下:

Future<MyResultClass> ErrorHandlingMethod(Future<MyResultClass> Function() myMethod) async {
  
  MyResultClass result = await myMethod();

  if (result.failed && result.cause.canBeFixed) {
     // 执行修复操作
     // ...
     // 调用函数生成新的Future,发起新请求
     result = await myMethod();
  }

  return result;
}

调用方式调整

原来的调用如果是:

await ErrorHandlingMethod(dio.get(...));

现在需要改成:

await ErrorHandlingMethod(() => dio.get(...));

原因说明

  • 直接传dio.get(...)时,代码会立即执行这个请求并返回一个Future对象,后续无论多少次await这个对象,都只会拿到第一次请求的结果。
  • 传() => dio.get(...)这种函数时,只有当你调用myMethod()时才会执行DIO请求并生成新的Future,每次调用都会触发全新的请求流程,包括所有拦截器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:57:20