JavaScript中对于 promise和async和await的理解

对于一段基于promise的异步操作,我们可以这样使用

 

function fn1 (ms){
  return new Promise(
      (reslove) => {
        setTimeout(()=>{
        console.log('--定时器内--',ms)
        reslove(ms)
      },ms)
    }
  )
}

function fn2 (value,ms){
  console.log('头')  
  fn1(ms).then((res)=>{
    console.log(value,'一个value',res,'返回值')
    console.log('尾巴')
  })
  
 }

fn2('输入值',2000)

  

用async和await可以这样改写

async function fn1 (ms){
  await new Promise(
      (reslove) => {
        setTimeout(()=>{
        console.log('--定时器内--',ms)
        reslove(ms)
      },ms)
    }
  )
}

async function fn2 (value,ms){
  console.log('头')  
  const result = await fn1(ms)
  console.log(value,'一个value',result,'返回值')
  console.log('尾巴') 
}

fn2('输入值',2000)

  

如果promise要进入reject(失败)状态

  

function fn1 (ms){  
  return new Promise( (reslove,reject) => { let bool = false setTimeout(()=>{ console.log('--定时器内--',ms) if(bool){ reslove() }else{ reject() } },ms) } ) } function fn2 (value,ms){ console.log('头') fn1(ms).then(()=>{ console.log(value,'一个value') console.log('尾巴') }).catch(()=>{ console.log('报错——这里会有错误提示') }) } fn2('输入值',2000)
   //  头
  //   定时器内--,2000
 //   报错——这里会有错误提示

  

await也能返回Promise对象

但是我们也想捕捉reject(失败)状态的话,可以考虑try,catch或者用返回promise的catch

async function fn1 (ms){
  await new Promise(
      (reslove,reject) => {
        let bool = false
        setTimeout(()=>{
        console.log('--定时器内--',ms)
        if(bool){
            reslove()
        }else{
            reject('报错——这里会有错误提示')
        }
      },ms)
    }
  )
}

async function fn2 (value,ms){
  try{
    console.log('头')  
    await fn1(ms)
    console.log(value,'一个value')
    console.log('尾巴')
  }catch(err){
      console.log(err)
  }
 }
// 或
async function fn2 (value,ms){
    console.log('头')  
    await fn1(ms).then((res) =>{}).catch((err) => {console.log(err)})
    console.log(value,'一个value')
    console.log('尾巴')
 }

fn2('输入值',2000) // 头 // --定时器内--,2000 // 报错——这里会有错误提示

  

 

posted @ 2021-11-25 17:21  时间观测者  阅读(104)  评论(0编辑  收藏  举报