Flutter必備語言Dart教程04 - 異步,庫


現在我們來看看如何在Dart中處理異步代碼。使用Flutter時,會執行各種操作,例如網絡調用和數據庫訪問,這些操作都應該異步執行。

在Dart中導入庫

在Dart中使用異步,需要先導入異步庫。

Future

異步庫包含一個名爲Future的類,Future是基於觀察者模式的。如果您熟悉Javascript中的Rxjs或Promises,那麼理解起來會很容易。

簡單來說,Future定義的是“未來”發生的事情,也會在未來某個時刻返回一個值給我們。讓我們看看如何使用Future。

Future是一個泛型類型,即 Future <T>,你必須指定返回值的類型。


我們定義了一個名爲getAJoke的函數,它返回一個Future <String>。使用new關鍵字創建Future,Future構造函數接收一個返回值類型爲T的函數參數。無論您在匿名函數中返回什麼,都會被轉化爲Future。

在main中,我們調用getAJoke函數,該函數返回 Future<String>。我們通過調用then函數來訂閱Future,這些函數註冊了一個回調,當Future發出值時調用它。我們還註冊了一個catchError來處理在執行Future期間發生的任何異常。在我們的示例中,我們沒有發生任何異常。

以下是發生異常的示例。


在這個例子中,結果會立即返回。但在實際業務中,會使用Future來執行一些需要時間的代碼,例如網絡調用。我們可以使用 Future.delayed() 來模擬該行爲。


現在,如果運行該程序,等待2秒鐘後纔出結果。讓我們看另一個例子。


如您所見,我在調用函數後添加了一個print語句。在這種情況下,首先執行print語句,然後打印從Future返回的值。

但是,如果我們有一個Future,我們想先執行它,然後再執行print語句。這就需要使用 async/await 了。

Async/Await

首先在第3行的main函數的大括號之前添加async關鍵字。

然後我們在調用getAJoke函數之前添加await關鍵字,它的作用是等待從Future返回結果。後邊的代碼也會一直等待着被執行。

我們將代碼包裝在 try/catch 塊中,來捕獲任何異常(之前使用catchError回調來捕獲)。要使用關鍵字await,就必須使用async關鍵字標記該函數,否則它將無法工作。

總結

這就是本教程系列的內容,更多語法細節和功能特性,強烈推薦閱讀官方語言文檔。接下來讓我們一起探索Flutter開發之旅。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章