gpt4 book ai didi

flutter - list.forEach 在异步方法中没有正确等待

转载 作者:IT王子 更新时间:2023-10-29 06:36:19 27 4
gpt4 key购买 nike

forEach中使用await时,代码不会等待,而是继续执行forEach之后的代码,但是,当使用普通的 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");
}
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");
}

第一个示例将在 for 完成后打印,而第二个示例将在 for 完成之前打印。

我做错了什么吗?

最佳答案

当您使用 for 时,您会在代码中执行某些操作 n 次,因此每个 await 都按预期工作。使用 forEach,您开始对列表的每个元素进行一些操作并继续执行以下代码,因此在这种情况下,您不必等待 await

的结果

更新:

下面是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");
}

关于flutter - list.forEach 在异步方法中没有正确等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57324877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com