在 《異步-async和await》 小節中,提到過一個異步函數,會返回一個 Future 對象,它持有了異步函數的返回結果。github
本篇文章,就來認識一下 Future 吧。bash
Future 是在將來某個時間得到想要對象的一種手段。異步
以上是 Future 的定義。async
簡單來講,就是咱們可以經過它在某個時間點得到異步任務中返回的值。函數
實際上,就是給 Future 設置回調函數,當異步任務執行完成後,會調用回調函數。post
Future<T> login = new Future<T>(() {
...
return t;
});
login.then((t){
//..
})
複製代碼
當異步的 login 任務執行完成後,回調用 then()
中的回調函數。ui
Future.then()
spa
任務執行完成會進入這裏,可以得到返回的執行結果。3d
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((){
//不管成功或失敗都會走到這裏
});;複製代碼