我想在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 回圈中請求,我不需要其他索引。我能怎么做 ?
uj5u.com熱心網友回復:
此代碼一次呼叫所有請求,只需洗掉await并then在請求結束時呼叫該方法:
_allListModel() {
for (var i = 0; i < carModel.length; i ) {
postData(i).then((value) {
differentList.add(value);
});
}
}
uj5u.com熱心網友回復:
您應該使用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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330781.html
