细说JS系列(二十七)—async

171 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情

铃铛说点题外话

一句话前情回顾:BFC是什么、BFC的触发方式以及BFC能解决的问题

一句话介绍今天:async和await

铃铛说正文

image.png

async和await是一对cp,他俩必须一起出现。

async

我们之前在写异步代码的时候,我们会采用回调函数,但是回调函数可能会导致“回调地狱”。之后ES6中提出了Promise,那么async我们就可以看做是Promise的一种语法糖。在promise中我们会将拿到的结果放进resolve中,之后结果可以在then中进行成功的回调。那async是怎么实现异步的呢?

async fucntion foo1 (){}

const foo2 = async () => {}

上面说了async和await是一对cp,要一起出现,那么如果只出现async会怎么样呢? 如果async函数里面没有await的时候,这个async的函数执行顺序会和普通函数的执行顺序一样。我们也可以理解为async无用。

async的返回值

async函数的返回值一依旧是promise对象,如果函数内部没有任何的返回值,那么相当于返回Undefined。也就是相当于返回了Promise.resolve(undefined)。如果返回的值是一个number类型呢,就是相当于Promise.resolve(number)。除了返回值的类型,异步函数中的异常,会被称为异步函数的返回的Promise.reject()

async function foo() {
  throw new Error("error")
}

foo().then(res => {
  console.log(res)
}).catch(error => {
  console.log(error)
})

以上案例我们可以理解为一个函数外层使用async,没有配合使用await的时候,和我们直接定义普通函数没有区别。

跟铃铛说再见

学习的最后一步:放松

今日冷笑话:我有一朋友经常回家只要喊芝麻开门,他们家的门就开了。后来我终于忍不住问他这门开门的原理是什么。然后他白了我一眼,说了句:我妹妹名字叫芝麻。。

放松结束,猜猜明天会说讲些什么吧