极简实例理解javascript async await

let p = new Promise((resolve, reject) => {
    setTimeout(() => {
        let n = Math.round(Math.random()*2)
        if(n%2==0){
            resolve('world')
        }
        else{
            reject('hello')
        }
    }, 2000);
})

// p.then(msg=>{
//     console.log(`ok:${msg}`)
// }).catch(err=>{
//     console.log(`error:${err}`)
// })

async function foo(){
    let result = await p;
    console.log('fooooooo')
    console.log(result)
}

foo().catch(err=>{
    console.log(err)
})
console.log('foo')
  1. await 必须放在 async function 函数中调用;
  2. await的是一个Promise对象,返回值是Promise中参数方法中resolve的值。
  3. await是阻塞的
  4. await的Promise对象如果reject,async function中await后面的代码不会执行
  5. 调用async function不是阻塞的;
  6. await的Promise对象如果reject,调用async function需要catch捕获异常。
  7. await底层是通过generator(yield,next,协程+Promise)实现的。
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值