13.你會處理Dart中的異步任務嗎?

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

在 Dart 中,能夠使用 asyncawait 關鍵字來處理異步任務。github

這是一種很現代化的異步處理方式,它能夠讓你的異步代碼看起來像同步代碼同樣:bash

task() async {
    var entrypoint = await findEntrypoint();
    print(entrypoint);
}
複製代碼

在上面這個 異步函數 中,進行了一個耗時任務 findEntrypoint(),而後調用了 print(entrypoint) 輸出耗時任務返回結果。異步

這個過程看起來就像一個同步過程同樣。async

async

async 關鍵字是用來標識一個函數是異步函數,該類函數會有一個返回值,其類型爲 Future函數

Future<T> login() async {
    //..
}
複製代碼

建立一個異步函數很簡單,只須要給函數加個 async 關鍵字就行。post

其中,範型 T 具體是什麼,取決於你的異步函數 return 的是什麼。ui

若是沒有 returnT 就是 nullspa

你能夠在經過 Future 的 then() 切換到同步中,而後獲取返回值。3d

Future<T> login = login();
login.then((t){
    //..
})
複製代碼

或者,你也能夠在異步函數中,經過 await 關鍵字獲取。

await

await 關鍵字被用於修飾一個異步函數,它表示邏輯執行到這,須要等待異步函數執行完成,返回結果了才能接着執行。

此時,異步函數(async修飾的函數)的返回值類型就是 Future<T> 中的 T,你無需在從 Future 中獲取。

Future<String> task(String path) async {
  String r = await getFileContent(path);
  return r;
}
複製代碼

上面例子中異步函數 getFileContent() 直接返回了所需的 String 類型結果。

⚠️ 注意,await 關鍵字只能在異步函數中使用,即若是你在一個函數中使用了 await,那這個函數就須要被變爲異步函數。

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

如何找到我?

傳送門:CoorChice 的主頁

傳送門:CoorChice 的 Github

相關文章
相關標籤/搜索