async和await

目的:将异步任务处理得像同步任务。

特点:语义化明确(async表示有异步任务、await表示等待右侧结果)、内置执行器(不用手动一步一步执行)、适用性广(await后可以跟原始类型或promise对象)、返回一个promise对象。

async function test () {
  let n = await new Promise((resolve, reject) => {
    setTimeout(() => resolve(1), 300)
  }).then(console.log)
  console.log(2)
}
test()
// 1
// 2

:如果不使用async和await,输出应该是 2 1,这就是这个语法的作用。

async function test () {
  let n = await new Promise((resolve, reject) => {
    setTimeout(() => console.log(1), 300)
  })
  console.log(2)
}
test()
// 1

:如果await的promise对象没有被resolve,后面的代码将被一直阻塞。

async function test () {
  let n = await new Promise((resolve, reject) => {
    setTimeout(() => reject(1), 300)
  })
  console.log(2)
}
test()
// 报错 并且没有输出 2

如果await的promise的报错没有被处理,后面的代码也不会被执行。将报错进行catch处理,或将promise放在try {} catch {}中。

async function test () {
    try{
        let n = await new Promise((resolve, reject) => {
            setTimeout(() => reject('err'), 300)
          })
        console.log(n)
    } catch (err) {
        console.log(err)
    }
    console.log(2)
}
test()
// err
// 2

async 返回的是一个promise对象,如果没有在async函数中写return,返回promise对象的resolved值为undefined,如果写了return,则resolved值为return的值。

async function test () {
  try {
    let n = await new Promise((resolve, reject) => {
      setTimeout(() => reject('err'), 300)
    })
    console.log(n)
  } catch (err) {
    console.log(err)
  }
  console.log(2)
  return 3
}
console.log(test())
/* Promise { <state>: "pending" }
<state>: "fulfilled"
<value>: 3
<prototype>: Promise.prototype { … }
debugger eval code:13:9 */
// err
// 2

参考

简书:async和await

阮一峰先生的ES6入门:async 函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值