async 与 await 是两个关键字,能让我们用同步的写法来写异步的程序。

async 关键字用于函数前面,它能使用函数返回的的值变成一个 promise:

单单是这样并不能体现 async 的作用, async 需要搭配 await 使用才能起到效果。

await 关键字表示等待 promise 执行完成并得到执行结果, await 只能在 async 函数中使用。

假设我们有一个使用 promise 语法的实例如下。

await 并不意味着会阻塞 JavaScript 的主线程的执行, 它阻塞的只是 async 函数的执行。

async 与 await 最大的好处就是让我们用同步的思维去写异步的程序。

假设我们有以下代码,要下载一个文件,这个文件的下载链接包含在 A 文件当中,而 A 文件的下载链接包含在 B 中, B 又包含在 C 中。

我们会陷入回调地狱中,回调越写越多,代码执行顺序越来越混乱。

当然,由于 then 中的返回值会作为下一个 then 的参数,因此我们可以改写如下。

但依旧是不够简洁,那么就可以使用 asnyc 、 await 改写我们的程序了:

$$tip async、await 使得我们可以用同步的写法来写异步的代码,特别在于执行的结果是下一个执行的必需参数的时候。将 func 的代码改成使用 async、await 的语法执行。