繁体   English   中英

Dart 异步等待未来

[英]Dart async await with a future

我遇到这样一种情况,即 map 方法未在未来列表中的返回语句之前完成。

这是下面的代码。 打印“####### returnFormFields----”的行首先打印,然后运行 map。 在返回数据之前,如何确保 map 已完成。 任何帮助是极大的赞赏!

 void callFetchForms() async {

  var tempFormFields = [1, 2, 3, 4, 5];

  var tempFormFields2;

  tempFormFields2 = await get_select_system_field_data(tempFormFields);

  print("-----After response : tempFormFields2-------");
  print(tempFormFields2);
}

Future<List<dynamic>> get_select_system_field_data(tempFormFields) async {

var returnFormFields = await tempFormFields.map((fieldData) async {
  print(fieldData);
  
   final response = await http
  .get(Uri.parse('https://jsonplaceholder.typicode.com/users/${fieldData}'));

  if (response.statusCode == 200) {
    var returnData = await jsonDecode(response.body);
    print("Return data for ${fieldData}");
    print(returnData);
  } else {
    printWarning("Error in Response");
  }      

  return fieldData;
}).toList();

print("#############  returnFormFields------");
print(returnFormFields);
print(returnFormFields.runtimeType);

return returnFormFields;
}

由于map总是返回一个List而不是Futureawait没有任何效果,而 function 只是立即返回一个List<Future> ,并且没有等待任何单个 Futures 。

为了等待所有的期货,您可以使用Future.wait

final formFieldFutures = tempFormFields.map((fieldData) async {
    // ...
});

final returnFormFields = await Future.wait(formFieldFutures);

print("#############  returnFormFields------");
print(returnFormFields);
print(returnFormFields.runtimeType);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM