![](/img/trans.png)
[英]Future<void>, async, await, then, catchError in Flutter/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
而不是Future
, await
没有任何效果,而 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.