在 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,那这个函数就须要被变为异步函数。