synchronous operation:同步操作会阻止其他操作执行到完成。
synchronous function:同步函数仅执行同步操作。
asynchronous operation:异步操作一旦启动,就可以在完成之前执行其他操作。
asynchronous function:异步函数至少执行一个异步操作,也可以执行同步操作。
1、future
future(小写的“ f”)是 Future(大写的“ F”)类的实例。 future表示异步操作的结果,
并且可以具有两种状态:未完成或已完成。uncompleted or completed.
Uncompleted
当您调用异步函数时,它将返回未完成的future。 那个future正在等待函数的异步操作完成或引发错误。
Completed
如果异步操作成功,则future将以一个值完成。 类型为Future <T>的Future的类型为T的值。例如,类型为Future <String>的Future的字符串的值。 如果future未产生可用价值,则该future的类型为Future <void>。
否则,它会以错误完成。
2、要定义异步函数,请在函数主体之前添加async:
await关键字仅在异步函数中起作用。
如果函数具有声明的返回类型,则将类型更新为Future <T>,其中T是函数返回的值的类型。如果该函数未明确返回值,则返回类型为Future <void>
Future<String> reportUserRole() async {
var username = await fetchRole();
return 'User role: $username';
}
3、错误处理
Future<void> printOrderMessage() async {
try {
var order = await fetchUserOrder();
print('Awaiting user order...');
print(order);
} catch (err) {
print('Caught error: $err');
}
}
Future<String> fetchUserOrder() {
// Imagine that this function is more complex.
var str = Future.delayed(
Duration(seconds: 4),
() => throw 'Cannot locate user order');
return str;
}
Future<void> main() async {
await printOrderMessage();
}