我
async/await 是什么,相比于 Promise 有什么优势?
难度:
async
函数,就是 Generator
函数的语法糖,它建立在 Promise
上,并且与所有现有的基于 Promise
的 API 兼容。
- Async — 声明一个异步函数
async function someName(){...}
- 自动将常规函数转换成
Promise
,返回值也是一个Promise
对象 - 只有
async
函数内部的异步操作执行完,才会执行then
方法指定的回调函数 - 异步函数内部可以使用
await
- 自动将常规函数转换成
- Await — 暂停异步的功能执行
var result = await someAsyncCall()
- 放置在
Promise
调用之前,await
强制其他代码等待,直到Promise
完成并返回结果 - 只能与
Promise
一起使用,不适用与回调 - 只能在
async
函数内部使用
- 放置在
优势
代码读起来更加同步,Promise
虽然摆脱了回调地狱,但是 then 的链式调用也会带来额外的阅读负担
Promise
传递中间值非常麻烦,而 async/await
几乎是同步的写法,非常优雅
错误处理友好,async/await
可以用成熟的 try/catch
,Promise
的错误捕获非常冗余
调试友好,Promise
的调试很差,由于没有代码块,你不能在一个返回表达式的箭头函数中设置断点,如果你在一个.then
代码块中使用调试器的步进(step-over
)功能,调试器并不会进入后续的.then
代码块,因为调试器只能跟踪同步代码的『每一步』。