await
一个变量时,会暂停执行并返回;await
一个函数时,该函数是继续执行的,直至在该函数中遇到下述情况之一时才暂停执行该函数并返回:
- 函数中出现
await
表达式时。 - 函数中出现
return
语句时。 - 函数体结束。
示例代码一
给出两段示例代码,看看是否理解。片段1:
import 'dart:io';
Future<void> TestDart() async{
print("TestDart Begin");
functionA();
functionB();
print("TestDart End");
}
Future<void> functionA() async{
print('functionA Begin');
await "";
print('functionA End');
}
Future<void> functionB() async{
print('functionB Begin');
await "";
print('functionB End');
}
void main(){
print('main Begin');
TestDart();
print('main End');
}
执行结果:
main Begin
TestDart Begin
functionA Begin
functionB Begin
TestDart End
main End
functionA End
functionB End
片段2只在functionA()
前加了await
。
import 'dart:io';
Future<void> TestDart() async{
print("TestDart Begin");
await functionA();
functionB();
print("TestDart End");
}
Future<void> functionA() async{
print('functionA Begin');
await "";
print('functionA End');
}
Future<void> functionB() async{
print('functionB Begin');
await "";
print('functionB End');
}
void main(){
print('main Begin');
TestDart();
print('main End');
}
执行结果:
main Begin
TestDart Begin
functionA Begin
main End
functionA End
functionB Begin
TestDart End
functionB End
示例代码二
then()
并不会阻塞当前函数的执行,请看下面的示例代码。
void TestDart() async{
print("TestDart Begin");
functionA().then((value){
print("functionA End");
return value;
});
print("TestDart End");
}
Future<bool> functionA() async{
print('functionA Begin');
return false;
}
void main() async{
print('main Begin');
TestDart();
print('main End');
}
执行结果:
main Begin
TestDart Begin
functionA Begin
TestDart End
main End
functionA End
可见functionA End输出在了最后。
如果想要functionA End输出在TestDart Begin与TestDart End中间,类似顺序执行的效果,则要等待functionA()结束,在functionA()前加await即可。
void TestDart() async{
print("TestDart Begin");
await functionA().then((value){
print("functionA End");
return value;
});
print("TestDart End");
}
Future<bool> functionA() async{
print('functionA Begin');
return false;
}
void main() async{
print('main Begin');
TestDart();
print('main End');
}
执行结果:
main Begin
TestDart Begin
functionA Begin
main End
functionA End
TestDart End