在 《非同步-async和await》 小節中,提到過一個非同步函式,會返回一個 Future 物件,它持有了非同步函式的返回結果。
本篇文章,就來認識一下 Future 吧。
認識 Future
Future 是在未來某個時間獲得想要物件的一種手段。
以上是 Future 的定義。
簡單來說,就是我們能夠通過它在某個時間點獲得非同步任務中返回的值。
實際上,就是給 Future 設定回撥函式,當非同步任務執行完成後,會呼叫回撥函式。
Future<T> login = new Future<T>(() {
...
return t;
});
login.then((t){
//..
})
複製程式碼
當非同步的 login 任務執行完成後,回撥用 then()
中的回撥函式。
Future 的常用函式
Future.then()
任務執行完成會進入這裡,能夠獲得返回的執行結果。
Future.catchError()
有任務執行失敗,可以在這裡捕獲異常。
Future.whenComplete()
當任務停止時,最後會執行這裡。
Future.wait()
可以等待多個非同步任務執行完成後,再呼叫
then()
。只有有一個執行失敗,就會進入
catchError()
。Future.delayed()
延遲執行一個延時任務。
這是一個例子:
Future.wait([
// 2秒後返回結果
Future.delayed(new Duration(seconds: 2), () {
return "hello";
}),
// 4秒後返回結果
Future.delayed(new Duration(seconds: 4), () {
return " world";
})
]).then((results) {
//執行成功會走到這裡
print(results[0]+results[1]);
}).catchError((e){
//執行失敗會走到這裡
print(e);
}).whenComplete((){
//無論成功或失敗都會走到這裡
});;複製程式碼