好的,所以我有一个文件列表,我需要在列表的每个成员上运行一个函数.我基本上想做这样的事情:
for(File file in files) {
functionThatReturnsAFuture(file);
}
Run Code Online (Sandbox Code Playgroud)
但显然这不起作用,因为返回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);
Run Code Online (Sandbox Code Playgroud)
编辑:我想更多的背景是重要的.最终目标是将多个文件合并到一个JSON对象中,以便提交给服务器.FileReader对象使用事件来执行读取,因此我使用Completer创建了一个提供Future的包装函数.我可以让所有这些都异步运行,然后触发一个事件,当它们全部完成时提交它,但这相当多的设置与for-each-loop使它全部工作(如果存在,无论如何).核心问题是需要在文件列表上运行Future-returns函数,然后执行一个完全取决于它们的操作.
Pix*_*ant 17
当您需要等待多个期货完成并且您不关心订单时,您可以使用Future.wait():
Future.wait(files.map(functionThatReturnsAFuture))
.then((List response) => print('All files processed'));
Run Code Online (Sandbox Code Playgroud)
如果顺序很重要,您可以使用Future.forEach()代替等待每个Future完成,然后再转到下一个元素:
Future.forEach(files, functionThatReturnsAFuture)
.then((response) => print('All files processed'));
Run Code Online (Sandbox Code Playgroud)
Dart支持async
/的await
时间很长,这使得它可以编写为
someFunc() async {
for(File file in files) {
await functionThatReturnsAFuture(file);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4211 次 |
最近记录: |