async和await与promise的区别
2020-07-14 05:53
633 查看
async和await与promise的区别
一、什么是Async/Await?
- async/await是写异步代码的新方式,以前的方法有回调函数和 Promise。
- async/await是基于Promise实现的,它不能用于普通的回调函数。
- async/await与Promise一样,是非阻塞的。
- async/await使得异步代码看起来像同步代码,这正是它的魔力所在。
二、区别
- 函数前面多了一个async关键字。await关键字只能用在async定义的函数内。async函数会隐式地返回一个promise,该promise的reosolve值就是函数return的值。
- 第1点暗示我们不能在最外层代码中使用await,因为不在async函数内。例如:
// 不能在最外层代码中使用await await makeRequest() // 这是会出事情的 makeRequest().then((result) => { // 代码 })
三、为什么Async/Await更好?
-
使用async函数可以让代码简洁很多,不需要像Promise一样需要些then,不需要写匿名函数处理Promise的resolve值,也不需要定义多余的data变量,还避免了嵌套代码。
-
错误处理:Async/Await 让 try/catch 可以同时处理同步和异步错误。在下面的promise示例中,try/catch 不能处理 JSON.parse 的错误,因为它在Promise中。我们需要使用 .catch,这样错误处理代码非常冗余。并且,在我们的实际生产代码会更加复杂。
相关文章推荐
- 小程序之纯粹callback回调、promise和async、await区别以及用法
- js异步回调Async/Await与Promise区别
- angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )
- “setTimeout、Promise、Async/Await 的区别”题目解析和扩展
- 基于Promise的async和await的区别
- “setTimeout、Promise、Async/Await 的区别”题目解析和扩展
- promise,async await ,generator的区别和nextTick , setImmedate的关系
- promise Eslint sql传参方式 async-await
- async await promise
- callback, promise, co/yield, async/await 大混战
- 使用Promise和async-await实现的一个异步遍历+同步执行任务的实例
- Promise 在ECMA7中的简化async和await
- ES6_ 异步(Promise | Async/Await)
- 详解koa2学习中使用 async 、await、promise解决异步的问题
- 前端面试——回调、Promise、Generator和async-await
- 利用ES6中Promise的用法及 ES7中的async await解决异步函数顺序执行的回调地狱问题
- [Typescript] Promise based delay function using async / await
- Promise和async 和 await 修饰符
- sleep()在ES7中利用Promise和async/await的优雅实现
- async/await - 6.使用Promise.all()让多个await操作并行