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语句

参考链接:https://www.jianshu.com/p/0431e209dc0f

posted @ 2023-02-07 19:12  122www  阅读(25)  评论(0编辑  收藏  举报