在Dart语言中,异步操作是用Future对象来执行的,并且使用时还需要搭配async以及await关键字。
Future表示未来的意思,它代表将来函数的运算结果的对象,结果可能在未来的某个时刻知道。
在Dart语言中,Future由dart:async库提供,如果返回Future函数,将会发生以下两件事情:
- 这个函数加入待完成的队列并返回一个未完成的Future对象
- 当操作结束后,Future会返回一个值或者返回错误。
所以在声明一些包含耗时操作的函数时,需要用Future作为返回类型。如果一个方法的返回类型是Future,而函数内部并没有耗时操作,这是没有必要的
eg:
(1)
void main() async {
print("0000");
happy();
print("1111");
}
Future happy() async {
Future.delayed(Duration(seconds: 5));
print("Happy Day");
return null;
}
happy函数的返回值虽然是Future,但不是一个耗时函数,函数内部调用的Future.delayed()是一个耗时函数,但是没有用await,所以程序执行到这里时并不会阻塞,直接跳过执行了print("Happy Day")
,执行结果如下:
I/flutter: 0000
I/flutter: Happy Day
I/flutter: 1111
(2)
void main() async {
print("0000");
happy();
print("1111");
}
Future happy() async {
await Future.delayed(Duration(seconds: 5));
print("Happy Day");
return null;
}
加上await后,函数happy()就是一个耗时函数,所以执行结果是:
I/flutter: 0000
I/flutter: 1111
I/flutter: Happy Day
(3)
void main() async {
print("0000");
await happy();
print("1111");
}
Future happy() async {
await Future.delayed(Duration(seconds: 5));
print("Happy Day");
return null;
}
执行结果:
I/flutter: 0000
I/flutter: Happy Day
I/flutter: 1111