在 Dart 中,能夠使用 async
和 await
關鍵字來處理異步任務。github
這是一種很現代化的異步處理方式,它能夠讓你的異步代碼看起來像同步代碼同樣:bash
task() async {
var entrypoint = await findEntrypoint();
print(entrypoint);
}
複製代碼
在上面這個 異步函數 中,進行了一個耗時任務 findEntrypoint()
,而後調用了 print(entrypoint)
輸出耗時任務返回結果。異步
這個過程看起來就像一個同步過程同樣。async
async 關鍵字是用來標識一個函數是異步函數,該類函數會有一個返回值,其類型爲 Future。函數
Future<T> login() async {
//..
}
複製代碼
建立一個異步函數很簡單,只須要給函數加個 async 關鍵字就行。post
其中,範型 T
具體是什麼,取決於你的異步函數 return
的是什麼。ui
若是沒有 return
,T
就是 null。spa
你能夠在經過 Future 的 then()
切換到同步中,而後獲取返回值。3d
Future<T> login = login();
login.then((t){
//..
})
複製代碼
或者,你也能夠在異步函數中,經過 await 關鍵字獲取。
await 關鍵字被用於修飾一個異步函數,它表示邏輯執行到這,須要等待異步函數執行完成,返回結果了才能接着執行。
此時,異步函數(async修飾的函數)的返回值類型就是 Future<T>
中的 T
,你無需在從 Future
中獲取。
Future<String> task(String path) async {
String r = await getFileContent(path);
return r;
}
複製代碼
上面例子中異步函數 getFileContent() 直接返回了所需的 String 類型結果。
⚠️ 注意,await 關鍵字只能在異步函數中使用,即若是你在一個函數中使用了 await,那這個函數就須要被變爲異步函數。