4.0 async 与 await

/*
  1.async function (function return Promise)
    函数返回Promise对象
    promise对象的结果由async函数执行的返回值决定
  
  2. await expression (value or Promise)
    expression一般是Promise对象,也可以是其他值
      如果是Promise对象,await返回的是Promise成功的值
      如果是其他值,直接将此值作为await的返回值

  3. 
    await必须写在async中,但async可以没有await
    如果await的Promise失败,就会抛出异常,需通过try...catch...捕获处理
*/


// async函数返回一个promise对象
async function fn1() {
  //return 1
  //throw 2
  //return Promise.resolve(3)
  return new Promise((resolve, reject)=>{
    setTimeout(()=>{
      resolve(4)
    }, 1000)
  })
}

const result = fn1()
//console.log(result) //Promise { 1 }

result.then(
  value => {
    console.log('onResolved()', value)
  },
  reason => {
    console.log('onRejected()', reason)
  }
)


/*------------------------*/

function fn2(){
  return new Promise((resolve, reject)=>{
    setTimeout(()=>{
      //resolve(4)
      reject(6)
    }, 1000)
  })
}

function fn4(){
  return 5
}

async function fn3(){
  //const value = await fn2() //await右侧表达式为Promise,得到的结果就是promise成功的value
  const value = await fn4() //await右侧表达式不为Promise,得到的结果就是它本身
  console.log('value', value)
}

fn3()

async function fn5(){
  try{
    const value = await fn2()
    console.log('fn5 value', value)
  }catch(error){  //捕获失败promise的结果
    console.log('fn5 error', error)
  }
}

fn5()
posted @ 2020-01-28 12:19  friedCoder  阅读(163)  评论(0编辑  收藏  举报