14.關於Dart中的Future你掌握的夠嗎?

CoorChice發表於2019-03-19

目錄傳送門:《Flutter快速上手指南》先導篇

《非同步-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((){
  //無論成功或失敗都會走到這裡
});;複製程式碼


目錄傳送門:《Flutter快速上手指南》先導篇

如何找到我?

傳送門:CoorChice 的主頁

傳送門:CoorChice 的 Github


相關文章