gpt4 book ai didi

dart - 在 Dart 中使用带有 Future 的循环

转载 作者:行者123 更新时间:2023-12-02 15:24:43 28 4
gpt4 key购买 nike

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

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 循环相比,这是相对大量的设置(如果存在的话,无论如何) )。核心问题是需要在文件列表上运行 Future-returning 函数,然后执行依赖于所有文件都已完成的操作。

最佳答案

当需要等待多个Futures完成并且不关心顺序时,可以使用Future.wait() :

Future.wait(files.map(functionThatReturnsAFuture))
.then((List response) => print('All files processed'));

如果顺序很重要,您可以使用 Future.forEach()相反,它等待每个 Future 完成后再移动到下一个元素:

Future.forEach(files, functionThatReturnsAFuture)
.then((response) => print('All files processed'));

关于dart - 在 Dart 中使用带有 Future 的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24437673/

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