如何正确地等待dart中的多个异步方法



我最近开始发展为扑动。启动我的应用程序时,我首先想加载来自不同来源的数据。我在这方面遇到了麻烦,似乎我还没有理解async/await。

我想做什么

启动我的应用程序时,我想从多个源加载数据。这应该并行进行,但只有在所有数据源完全加载后才能继续。

我尝试了什么

import 'package:flutter/material.dart';
class AsyncTester extends StatefulWidget {
@override
_AsyncTesterState createState() => _AsyncTesterState();
}
class _AsyncTesterState extends State<AsyncTester> {
@override
void initState() {
super.initState();
startApplication();
}
@override
Widget build(BuildContext context) {
return Container();
}
void startApplication() async {
await loadData();
print("starting Application!");
}
loadData() {
loadDataSource1();
loadDataSource2();
}
void loadDataSource1() async {
await Future.delayed(Duration(seconds: 3));
print("Data Source 1 loaded.");
}
void loadDataSource2() async {
await Future.delayed(Duration(seconds: 2));
print("Data Source 2 loaded.");
}
}

输出为:

I/flutter(23100(:启动应用程序
I/flutter(23100(:数据源2已加载
I/flutter(23100(:数据源1已加载。

我不明白startApplication((为什么不等待loadData((完成。我想那正是等待做什么?

顺便说一句,我正在loadData((中嵌套loadDataSource1((和loadDataSource2((,因为这样做

void startApplication() async {
await loadDataSource1();
await loadDataSource2();
print("starting Application!");
}

将一个接一个地加载数据。这是正确的还是有更好的方法?

您应该使用Future.wait,此方法将并行执行两个异步操作,并在它们全部完成后完成:

void startApplication() async {
await Future.wait([
loadDataSource1(),
loadDataSource2(),
]);
print("starting Application!");
}

最新更新