面试题 -- async await 理解?
# 前言
从字面上来看,async 是 异步 的简写,await 则为 等待,所以很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。
async/await 其实是 Generator 的语法糖,它能实现的效果都能用 then 链来实现,它是为优化 then 链而开发出来的。
# 对比 Promise 优势
- 代码读起来更加同步,
Promise虽然摆脱了回调地狱,但是then的链式调⽤也会带来额外的阅读负担。 Promise传递中间值⾮常麻烦,⽽async/await⼏乎是同步的写法,⾮常优雅。- 错误处理友好,
async/await可以⽤成熟的try/catch,Promise的错误捕获⾮常冗余。 - 调试友好,
Promise的调试很差,由于没有代码块,你不能在⼀个返回表达式的箭头函数中设置断点,如果你在⼀个.then代码块中使⽤调试器的步进step-over功能,调试器并不会进⼊后续的.then代码块,因为调试器只能跟踪同步代码的每⼀步。