downloadfile
被声明为void
。当foreach-loop downloadfile(...)
结束时,应该执行函数encode()
。怎么做?
void main() async {
List<String> urld;
urld = await get_vid();
await Future.wait(urld.asMap(), (i, s) async {await downloadfile(s, i.toString());}) // doens't work
urld.asMap().forEach((i, s) {downloadfile(s, i.toString());}); // the original
encode(); // should only be executed if all downloadfile-threads are finished.
}
1条答案
按热度按时间kpbwa7wx1#
你不能这么做。
如果
downloadfile
返回void
,并且不接受任何回调作为参数,那么就没有办法知道它何时完成,因为它没有告诉。(除非它是完全同步的,在这种情况下,它在返回时完成。既然你问了,我假设情况不是这样的。)您不应该假设它实际上返回类型为
void
的Future
。它可能会,也可能会在明天停止这样做。不要试图在void
面纱后面寻找,这是为了保护你自己。因此,您需要更改
downloadfile
以返回一个Future
,该Future
在完成时完成,或者接受一个类似, {void Function()? onDone}
的回调,该回调在完成时被调用。前者返回一个Future
,更可取,因为它与语言await
特性一起工作。假设情况是这样的,那么:
或
应该可以。