Вы не можете сделать это с forEach
.
Но вы можете использовать Future.wait
и .map
вот так
Future<void> deleteAll(List stuff) {
return Future.wait(stuff.map((s) => delete(s)));
}
Future<void> delete(Stuff s) async{
....
await file.writeAsString(jsonEncode(...));
}
Когда использовать async
ключевое слово:
Вы можете использовать async
, когда ваша функция использует ключевое слово await
внутри.
Так что, когда использовать ключевое слово await
:
- , когда вы хотите получить результат из асинхронной функции и хотите сделать некоторые логи c на результат
Future<int> fetchCountAndValidate() asycn{
final result = await fetchCountFromServer();
if(result == null)
return 0;
else
return result;
}
Когда вы хотите вызвать несколько асинхронных функций
Future<int> fetchTotalCount() asycn{
final result1 = await fetchCount1FromServer();
final result2 = await fetchCount2FromServer();
return result1 + result2;
}
Когда вам не нужно async
или await
:
- Когда вы просто вызываете другую асинхронную функцию
Future<int> getCount(){
//some synchronous logic
final requestBody = {
"countFor": "..."
};
return fetchCountFromServer(requestBody); //this is an asynchronous function which returns `Future<int>`
}
В некоторых редких случаях мы не заботимся о завершении асинхронной функции
void sendLogoutSignal(){
http.post(url, {"username" : "id0001"});
}