async,await
注意点:
① async/await是ES7新特性
② async/await是写异步代码的新方式,以前的方法有回调函数和Promise③ async/await是基于Promise实现的,它不能用于普通的回调函数
④ async/await与Promise一样,是非阻塞的
⑤ async/await使得异步代码看起来像同步代码,这正是它的魔力所在
async
(1)async 表示函数里有异步操作, await 表示紧跟在后面的表达式需要等待结果。
(2)async
函数返回一个 Promise
对象,可以使用 then
方法添加回调函数。当函数执行的时候,一旦遇到 await 就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
await
(1)如果表达式是 promise 对象, await 返回的是 promise 成功的值
(2)如果表达式是其它值, 直接将此值作为 await 的返回值
(3)await 必须写在 async 函数中, 但 async 函数中可以没有 await,如果 await 的 Promise 失败了, 就会抛出异常, 需要通过 try...catch 捕获处理。
和promise的区别:
1)简洁的代码
使用async函数可以让代码简洁很多,不需要像Promise一样需要些then,不需要写匿名函数处理Promise的resolve值,也不需要定义多余的data变量,还避免了嵌套代码。
2) 错误处理:
Promise 中不能自定义使用 try/catch 进行错误捕获,但是在 Async/await 中可以像处理同步代码处理错误。
3)条件语句
条件语句也和错误捕获是一样的,在 Async 中也可以像平时一般使用条件语句。
4)中间值
在一些场景中,也许需要 promise1 去触发 promise2 再去触发 promise3,这个时候代码可能嵌套比较多,而使用async/await就变得很简单。
5)调试
async/await能够使得代码调试更简单。2个理由使得调试Promise变得非常痛苦:
-
《1》不能在返回表达式的箭头函数中设置断点
-
《2》如果你在.then代码块中设置断点,使用Step Over快捷键,调试器不会跳到下一个.then,因为它只会跳过异步代码。
使用await/async时,你不再需要那么多箭头函数,这样你就可以像调试同步代码一样跳过await语句
本文来自博客园,作者:122www,转载请注明原文链接:https://www.cnblogs.com/131362wsc/p/17099544.html