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

CoorChice發表於2019-03-19

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

在 Dart 中,可以使用 asyncawait 關鍵字來處理非同步任務。

這是一種很現代化的非同步處理方式,它可以讓你的非同步程式碼看起來像同步程式碼一樣:

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

在上面這個 非同步函式 中,進行了一個耗時任務 findEntrypoint(),然後呼叫了 print(entrypoint) 輸出耗時任務返回結果。

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

async

async 關鍵字是用來標識一個函式是非同步函式,該類函式會有一個返回值,其型別為 Future

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

建立一個非同步函式很簡單,只需要給函式加個 async 關鍵字就行。

其中,範型 T 具體是什麼,取決於你的非同步函式 return 的是什麼。

如果沒有 returnT 就是 null

你可以在通過 Future 的 then() 切換到同步中,然後獲取返回值。

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


相關文章