JavaScript async

本文详细介绍了async函数中await关键字的使用方式,特别是在遇到promise返回reject情况下的异常捕获方法。并通过实例展示了如何通过catch方法捕获异常并使async函数继续执行,同时也涉及了Promise.all的使用场景和并发处理。

async 异常抛出捕获

async function 中 await 接受到的promise 如果返回的是reject() 如果这个async function中有多个await

那么返回reject的 await 将不会向下执行

如果需要想让他自动执行下去,那么必须捕获异常 

async function f(){
  await Promise.reject('错误')
  await Promise.resolve(console.log(1))
}
f()

catch 方法

async function demo(bool){
  return new Promise((resolve,reject)=>{
    try{
      if(bool) {
        return resolve(bool)
      }else{
        throw new Error(`promise err ${bool}`)
      }
    }
    catch(e){
      reject(e)
    }
  })
}

async function f(){
  await demo(true).then(resolve=>console.log(resolve))
  // await demo(false).catch(reject => console.log(reject)) 捕获异常,不会阻止 async 继续运行
  await demo(false).catch(reject => console.log(reject))
  await demo(true).then(resolve=>console.log(resolve))
}

f()

同步触发

// 同时触发
// 不存在继发
function fa(ms){
  setTimeout(()=>{
    console.log('fa')
  },ms)
}
function fb(ms){
  console.log(`${ms} fb`)
}

async function test (){
  let [a,b] = await Promise.all([fa(1000),fb(30000)])
}

test()

并发

var arraydata = ['2011','2012','2013']

async function test(arr) {
  const arrpromise = arr.map(async res=>{
    const src = `${res}年`
    console.log(new Date().toString())
    return src
  })
  for (const text of arrpromise){
    console.log(text)
  }
}
test(arraydata)

 

转载于:https://my.oschina.net/u/3529405/blog/1814994

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值