好的,我有一个文件列表,我需要对列表中的每个成员运行一个函数.我本质上想做这样的事情:

for(File file in files) {
    functionThatReturnsAFuture(file);
}

但显然这不会起作用,因为返回Future的函数异步激发.我唯一的 Select 是这样的吗?

List<File> files = new List<File>();
// Add files somewhere

Future processFile(int i) {
   return new Future.sync(() {
       //Do stuff to the file
       if(files.length>i+1) {
           return processFile(i+1);
       }
   });
}

processFile(0);

编辑: 我想更多的背景更重要.最终目标是将多个文件合并到单个JSON对象中,以便提交给服务器.FileReader对象使用事件执行读取,因此我使用Completer创建了一个提供Future的包装函数.我可以让所有这些都异步运行,然后触发一个事件,在它们全部完成时提交它,但与使其全部正常工作的for-each循环相比,这需要相对较多的设置(无论如何,如果存在这样的循环的话).核心问题是需要对文件列表运行"将来返回"函数,然后执行依赖于它们都已完成的操作.

推荐答案

DART支持async/await已经有很长一段时间了,这使得它可以写入为

someFunc() async {
  for(File file in files) {
    await functionThatReturnsAFuture(file);
  }
}

Dart相关问答推荐

我不明白在DART的`if()`语句中使用`case

捕获一个区域中的所有期货

根据 Id 比较两个不同的 List

如何在 Flutter 中向 AnimationController 添加 Curves 类动画?

在 Column Flutter 中居中展开 ListView

如何在Flatter中zoom 两个谷歌 map 标记

如何在 Flutter 中渲染单个像素?

Flutter web url 导航

Flutter Null 安全迁移说Package doesn't exist

在字符串中查找字母 (charAt)

如何将 转换为 List

如何左对齐 Flutter 中的 OutlineButton 图标

Flutter: shared preferences

带有 Dart 的 CORS,我如何让它工作?

在 Dart 中将 List 转换为字符串?

可以在 Dart 中的抽象类中声明静态方法吗?

Dart 的Expando功能是什么,它有什么作用?

如何在 Dart 中从外部查询 shadow DOM 中的元素?

有没有办法取消dartfuture ?

在 Dart 中为数字添加前导零