参考:https://www.dartcn.com/guides/language/language-tour#%E5%BC%82%E6%AD%A5%E6%94%AF%E6%8C%81
Dart
库中包含许多返回Future 或 Stream
对象的函数. 这些函数在设置完耗时任务(例如I/O
操作)后, 就立即返回了,不会等待耗任务完成。 使用async 和 await
关键字实现异步编程。 可以让你像编写同步代码一样实现异步操作。
处理 Future
可以通过下面两种方式,获得 Future 执行完成的结果:
- 使用
async 和 await.
- 使用
Future API
使用 async 和 await
关键字的代码是异步的。 虽然看起来有点想同步代码。
例如,下面的代码使用 await
等待异步函数的执行结果。
Future checkVersion() async {
var version = await lookUpVersion();
// 不出意外已经获取到 version
}
使用try, catch, 和 finally
来处理代码中使用 await
导致的错误。
try {
version = await lookUpVersion();
} catch (e) {
// React to inability to look up the version
}
声明异步函数
函数体被 async
标示符标记的函数,即是一个异步函数.
例如:
Future<String> lookUpVersion() async => '1.0.0';
处理 Stream
详细介绍可查看:Dart 语言Stream详解
当需要从 Stream
中获取数据值时, 可以通过一下两种方式:
- 使用
async
和 一个 异步循环 (await for
)。
以下是await for
循环的使用形式:
await for (varOrType identifier in expression) {
// Executes each time the stream emits a value.
}
上面 表达式 返回的值必须是 Stream 类型。 执行流程如下:
- 等待,直到流发出一个值。
- 执行
for
循环体,将变量设置为该发出的值 - 重复
1和2
,直到关闭流。
使用 break 或者 return
语句可以停止接收 stream
的数据, 这样就跳出了 for
循环, 并且从 stream
上取消注册。
- 使用
Stream API