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 的语法执行。