Max*_*aga 2 async-await dart flutter
在中使用await时forEach,代码不会等待,并且会在之后继续执行代码forEach,但是,在使用normal时for,它将正确等待,请使用以下代码段:
Future<void> uploadTexts(List<String> someTexts) async {
for(int i = 0; i < someTexts.length ; i++) {
var text = someTexts[i];
if (text != null) {
await uploadText(text);
}
}
print("THIS PRINTS AFTER THE FOR IS DONE");
}
Run Code Online (Sandbox Code Playgroud)
Future<void> uploadTexts(List<String> someTexts) async {
someTexts.where((text) => text != null).forEach((text) async{
await uploadText(text);
});
print("THIS PRINTS BEFORE THE FOREACH IS DONE");
}
Run Code Online (Sandbox Code Playgroud)
for结束后将打印第一个示例,而for结束前将打印第二个示例。
难道我做错了什么?
使用时,您将for在代码中执行n次操作,因此所有操作await均按预期进行。随着forEach您对列表的每个元素开始一些操作并继续执行以下代码,因此在这种情况下,您不必等待结果await
UPD:
这是解决方案forEach:
Future<void> uploadTexts(List<String> someTexts) async {
List<String> filtered = someTexts.where((text) => text != null);
await Future.forEach(filtered, (text) async {
await uploadText(text);
});
print("THIS PRINTS BEFORE THE FOREACH IS DONE");
}
Run Code Online (Sandbox Code Playgroud)