Flutter:当await操作耗时超2秒时执行指定操作(不中断流程)
解决方案
你可以通过同时启动两个异步任务实现需求:一个是原本的错误上报请求,另一个是延迟2秒的检查任务。延迟任务会在2秒后判断原请求是否未完成,若是则执行指定操作,完全不会中断原请求的流程。
示例代码如下:
// 定义需要修改的变量 bool isTimeout = false; // 先保存原请求的Future对象,不直接await final reportFuture = _errorReportRepository.sendErrorReport(event.errorReport); // 启动延迟检查任务 Future.delayed(const Duration(seconds: 2), () { // 判断原请求是否仍在执行中 if (!reportFuture.isCompleted) { isTimeout = true; // 这里可添加其他需要执行的操作 } }); // 正常等待原请求完成,原有流程不受影响 final response = await reportFuture;
代码说明
reportFuture先存储原请求的Future实例,让延迟任务和原请求并行执行Future.delayed会在2秒后触发回调,通过reportFuture.isCompleted判断原请求状态- 若原请求耗时超过2秒,
isCompleted为false,此时执行变量赋值等操作;若原请求在2秒内完成,回调内的操作不会触发 - 最后正常await原请求结果,保证原有业务流程不受干扰
内容的提问来源于stack exchange,提问作者Rami Dhouib
相关产品推荐
相关产品推荐

