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

Flutter for循环内异步网络请求无需等待前序返回的实现方法

实现方案

你的代码串行执行是因为在循环内部直接await了每个请求,导致每次都要等前一个请求完成才会发起下一个。要实现并行请求,核心逻辑是先收集所有请求的Future实例,再统一等待所有请求执行完成。

第一步:修复请求方法的并发安全问题

你现有postData方法中使用了共享的responseModel变量,并发场景下会出现数据覆盖的问题,需要修改为每个请求单独创建实例:

Future<ResponseModel?> postData(int index) async {
  // 每个请求单独创建实例,避免并发竞态
  final tempResponse = ResponseModel();
  tempResponse.carModel = carModel[index];
  return await _networkService
      .postdata<RequestModel, ResponseModel>(
          requestmodel: requestModel,
          responsemodel: ResponseModel(),
          path: ApiPath.API_DATA_LINK); 
}

第二步:修改循环逻辑为并行请求

使用Future.wait批量等待所有请求,所有请求会在你加入Future列表时同时发起,不需要等待前一个返回:

_allListModel() async {
  // 收集所有请求的Future,此时所有请求会并行发起
  final requestFutures = <Future<ResponseModel?>>[];
  for (var i = 0; i < carModel.length; i++) {
    requestFutures.add(postData(i));
  }
  // 统一等待所有请求完成,结果顺序和添加Future的顺序完全一致,和接口返回顺序无关
  differentList = await Future.wait(requestFutures);
}

可选优化

  • 如果需要兼容部分请求失败的场景,避免单个请求失败导致所有结果丢失,可以给每个Future添加异常捕获:
    requestFutures.add(postData(i).catchError((error) {
      print("第$i个请求失败: $error");
      return null; // 也可以返回自定义的错误占位实例
    }));
    
  • 如果请求量超过20个,建议添加并发数控制,避免触发服务器限流规则或本地资源耗尽。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:54:05