在 Dart 中,可以使用 async
和 await
關鍵字來處理非同步任務。
這是一種很現代化的非同步處理方式,它可以讓你的非同步程式碼看起來像同步程式碼一樣:
task() async {
var entrypoint = await findEntrypoint();
print(entrypoint);
}
複製程式碼
在上面這個 非同步函式 中,進行了一個耗時任務 findEntrypoint()
,然後呼叫了 print(entrypoint)
輸出耗時任務返回結果。
這個過程看起來就像一個同步過程一樣。
async
async 關鍵字是用來標識一個函式是非同步函式,該類函式會有一個返回值,其型別為 Future。
Future<T> login() async {
//..
}
複製程式碼
建立一個非同步函式很簡單,只需要給函式加個 async 關鍵字就行。
其中,範型 T
具體是什麼,取決於你的非同步函式 return
的是什麼。
如果沒有 return
,T
就是 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,那這個函式就需要被變為非同步函式。