13.你会处理Dart中的异步任务吗?

1,900 阅读2分钟

目录传送门:《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