Future(异步操作)
Future
有三种状态未完成
、完成带有值
、完成带有异常
,使用Future
可以简化事件任务。Dart中,可以使用Future
对象来表示异步操作的结果,Future返回类型是Future<T>
有三种方法处理Future的结果:
- then: 处理操作执行结果或者错误并返回一个新的Future
- catchError: 注册一个处理错误的回调
- whenComplete:类似final,无论错误还是正确,Future执行结束后总是被调用
使用then来回调,场景使用:UI需要接口的数据,一些异步执行函数
# demo1
main() {
Future f1 = new Future(() {
print("我是第一个");
});
f1.then((_) => print("f1 then"));
print("我是main");
}
# print:
# 我是main
# 我是第一个
# f3 then
Future和async/await结合使用
使用链式调用的方式把多个future连接在一起,会严重降低代码的可读性。使用async和await关键字实现异步的功能。async和await可以帮助我们像写同步代码一样编写异步代码
Future<String> getStr()async{
var str = HttpRequest.getString('www.fgyong.cn');
return str;
}
使用http
请求地址www.fgyong.cn
获取数据,然后返回。如何接收文本呢?
其实很简单,只需要使用await
关键字即可,用来注册then
回调。
main(List<String> args) async {
String string = await getStr();
print(string);
}
等同于
main(List<String> args) async {
getStr().then((value) {
print(value);
});
}
stream—连续异步操作
如果Future
表示单个计算的结果,则流是一系列结果。
侦听流以获取有关结果(数据和错误