Promise
Promise 是异步编程的一种解决方案,比传统的解决方案8i——回调函数和事件——更合理和更强大,简单地说,Promise好比容器,里面存放着一些未来才会执行完毕(异步)的事件的结果,而这些结果一旦生成是无法改变的
async await
async await也是异步编程的一种解决方案,他遵循的是Generator 函数的语法糖,他拥有内置执行器,不需要额外的调用直接会自动执行并输出结果,它返回的是一个Promise对象。
await函数不能单独使用,而且async函数返回的是一个Promise对象,可以使用then函数添加回调函数。当函数执行的时候,一旦遇到await函数就会先返回一个Promise对象,等到异步操作完成,再去执行后面的语句。如果 await 后面的异步操作出错,那么等同于 async 函数返回的 Promise 对象被 reject
区别
1.提案版本不同:Promise是ES6的新特性,async、await是ES7中的提案
2.代码简洁度:使用async函数可以让代码简洁很多;promise中,try/catch 不能处理 JSON.parse 的错误,因为它在Promise中。我们需要使用 .catch,这样错误处理代码非常冗余。
- 错误调试:Async/Await 让 try/catch 可以同时处理同步和异步错误。如果 Promise 连续调用,对于错误的处理是很麻烦的。你无法知道错误出在哪里。
- 不能在返回表达式的箭头函数中设置断点
- 如果你在.then代码块中设置断点,使用Step Over快捷键,调试器不会跳到下一个.then,因为它只会跳过异步代码。
- 使用await/async时,你不再需要那么多箭头函数,这样你就可以像调试同步代码一样跳过await语句。