【Flutter 1-13】Flutter手把手教程Dart语言——异步、Future、Stream、async、await详解
2021-03-12 06:27
标签:The 函数 finally 公众号 没有 对象 oid 同步 poi 作者 | 弗拉德 Dart 代码库中有大量返回 可以通过下面两种方式,获得 使用 必须在带有 尽管异步函数可以处理耗时操作,但是它并不会等待这些耗时操作完成,异步函数执行时会在其遇到第一个 使用 你可以在异步函数中多次使用 如果在使用 定义异步函数只需在普通方法上加上 将其改为异步函数,返回值是 注意,函数体不需要使用 上面的代码依次会输出: 【Flutter 1-13】Flutter手把手教程Dart语言——异步、Future、Stream、async、await详解 标签:The 函数 finally 公众号 没有 对象 oid 同步 poi 原文地址:https://www.cnblogs.com/fulade/p/14091052.html
来源 | 弗拉德(公众号:fulade_me)异步
Future
或Stream
对象的函数,这些函数都是异步的,它们会在耗时操作执行完毕前直接返回而不会等待耗时操作执行完毕。async
和await
关键字用于实现异步编程,并且让你的代码看起来就像是同步的一样。Future
Future
执行完成的结果:
async
和await
;Future API
;async
和await
的代码是异步的,但是看起来有点像同步代码。例如,下面的代码使用await
等待异步函数的执行结果。await lookUpVersion();
async
关键字的异步函数中使用 await
:Future checkVersion() async {
var version = await lookUpVersion();
// 使用 version 继续处理逻辑
}
await
表达式的时候返回一个Future
对象,然后等待await
表达式执行完毕后继续执行。try
、catch
以及finally
来处理使用await
导致的异常:try {
version = await lookUpVersion();
} catch (e) {
// 无法找到版本时做出的反应
}
await
关键字。例如,下面代码中等待了三次函数结果:var entrypoint = await findEntrypoint();
var exitCode = await runExecutable(entrypoint, args);
await flushThenExit(exitCode);
await
表达式的返回值通常是一个Future
对象;
如果不是的话也会自动将其包裹在一个Future
对象里。Future
对象代表一个"承诺",await
表达式会阻塞直到需要的对象返回。await
时导致编译错误,请确保await
在一个异步函数中使用。例如,如果想在main()
函数中使用await
,那么main()
函数就必须使用async
关键字标识。Future main() async {
checkVersion();
print(‘在 Main 函数中执行:版本是 ${await lookUpVersion()}‘);
}
声明异步函数
async
关键字即可。
将关键字async
添加到函数并让其返回一个Future
对象。假设有如下返回String
对象的方法:String lookUpVersion() => ‘1.0.0‘;
Future
:Future
Future API
。如有必要,Dart
会创建Future
对象。
如果函数没有返回有效值,需要设置其返回类型为 Future
Stream
Stream
也是用于接收异步事件数据,和Future
不同的是,它可以接收多个异步操作的结果(成功或失败)。 也就是说,在执行异步任务时,可以通过多次触发成功或失败事件来传递结果数据或错误异常。Stream
常用于会多次读取数据的异步任务场景,如网络内容下载、文件读写等。举个例子:Stream.fromFutures([
// 1秒后返回结果
Future.delayed(new Duration(seconds: 1), () {
return "hello 1";
}),
// 抛出一个异常
Future.delayed(new Duration(seconds: 2),(){
throw AssertionError("Error");
}),
// 3秒后返回结果
Future.delayed(new Duration(seconds: 3), () {
return "hello 3";
})
]).listen((data){
print(data);
}, onError: (e){
print(e.message);
},onDone: (){
});
hello 1
Error
hello 3
上一篇:electron 开发 - win7 运行后白屏 黑屏
下一篇:2019 ICPC Asia Xuzhou Regional. H. Yuuki and a problem(树状数组套主席树)
文章标题:【Flutter 1-13】Flutter手把手教程Dart语言——异步、Future、Stream、async、await详解
文章链接:http://soscw.com/index.php/essay/63546.html