网络层循环异步



我想在for循环中添加很多请求。这是我的网络方法。

Future postdata<T, F extends ApiResponseFromJson>({
@required T? requestmodel,
@required F? responsemodel,
@required String? path,
}) async {
try {
final response = await dio.post(path!, data: requestmodel);
print(ApiPath.API_URL + path);
if (response.data is List) {
return List<F>.from(
(response.data).map((e) => responsemodel!.fromJson(e)));
}
return responsemodel!.fromJson(response.data);
} on DioError catch (e) {
final errorMessage = DioExceptions.fromDioError(e).toString();
showSnackBarDialog("Hata", errorMessage, const Icon(Icons.error))
};

List<CarModel> carModel=[CarModel(),CarModel(),CarModel()...]

Future<ResponseModel?> postData(int index) async {
responseModel.carModel = carModel[i];
responseModel= await _networkService
.postdata<RequestModel, ResponseModel>(
requestmodel: requestModel,
responsemodel: ResponseModel(),
path: ApiPath.API_DATA_LINK); 
return responseModel;
}

_allListModel() async {
for (var i = 0; i < carModel.length; i++) {
differentList.add(await postData(i));
}

我有不同的列表,我需要请求列表的长度。但是在for循环中,总是等待另一个索引。但我不需要等待。因为networkModel去了长度不同的API列表,我不知道哪个结果会先到达。

我想请求在for循环,我不需要其他索引。我该怎么办?

此代码一次调用所有请求,仅删除await,并在请求结束时调用then方法:

_allListModel() {
for (var i = 0; i < carModel.length; i++) {
postData(i).then((value) {
differentList.add(value);
});
}
}

您应该使用Future.wait等待多个期货。你开始所有的,然后你等待,直到所有的完成,并将所有的结果添加到列表。

Future<void> _allListModel() async {
var futures = <Future<>>[]

for (var i = 0; i < carModel.length; i++) {
futures.add(postData(i));
}
var responses = await Future.wait(futures);
differentList.addAll(responses);
}

相关内容

  • 没有找到相关文章

最新更新