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
相关产品推荐
相关产品推荐

