【发布时间】:2014-08-17 17:29:00
【问题描述】:
好的,所以我有一个文件列表,我需要对列表的每个成员运行一个函数。我基本上想做这样的事情:
for(File file in files) {
functionThatReturnsAFuture(file);
}
但这显然行不通,因为返回 Future 的函数是异步触发的。我唯一的选择是这样的吗?
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-loop 而言,这是相对大量的设置(如果存在的话,无论如何) )。核心问题是需要在文件列表上运行一个未来返回函数,然后执行一个依赖于它们都已完成的操作。
【问题讨论】:
-
你的第一个例子有什么问题?函数是否异步运行有什么关系?
-
我用更多信息编辑了问题。