dart 中 Future 介绍
1、什么是Future?
Dart是一门单线程编程语言。如果任何代码阻塞线程执行都会导致程序卡死。异步编程防止出现阻塞操作。Dart使用Future对象表示异步操作。Future表示在将来某时获取一个值的方式。为了获得Future的值,可以使用async和await。
简单来说,Future就是一个Future<T>对象,当执行return await...
的时候,实际上返回的是一个延迟计算的Future对象,
备注:这个Future对象是Dart内置的,有自己的队列策略,它将要操作的事件放入EventQueue中,在队列中的事件按照先进先出的原则去逐一处理事件,当事件处理完成后,将结果返回给Future对象。
2、如何获取Future对象?
为了获得Future的值,可以使用async和await。
async:标记某个方法为异步方法(耗时方法),在声明方法的时候使用。
await:等待某个异步方法执行完毕,是“等待”之意,所以要在调用耗时方法的时候使用。
首先看一个例子:
getData() async{
return await http.get(Uri.encodeFull(url), headers: {"Accept": "application/json"});
}
//然后调用函数来获取结果
String data = getData();
这段代码在运行的时候会报错。因为data是String类型,而函数getData()是一个异步操作函数,其返回值是一个await延迟执行的结果。在Dart中,有await标记的运算,结果都是一个Future对象,Future不是String类型,所以就报错了。
如何获取异步函数的结果呢?Dart规定有async标记的函数,只能由await来调用,那么我们可以在函数前加一个await关键字:
String data = await getData();
但是,上面代码又违背了await必须要在async标记的函数中使用,所以赋值代码可以改成:
String data;
setData() async {
data = await getData(); //getData()延迟执行后赋值给data
}
3、async和await使用总结
async和await的使用其实就只有两点:
第一点:await关键字必须在async函数内部使用
第二点:调用async函数必须使用await关键字