async 和 await

async 和 await

async

async函数返回一个promise对象,promise对象的结果由async函数执行的返回值决定。

语法:

async function fun(){}
let fun = async function(){}

不写return 或 只写return没有值 默认返回undefined

async函数返回的promise对象 状态:成功 结果:undefined

async function fn(){
  // 函数不写return 或 只写return没有值 默认返回undefined
}
let result = fn()
// result 是一个成功的promise对象   状态:成功  结果:undefined

返回一个非promise类型的数据

async函数返回的promise对象 状态:成功 结果:返回值

async function fn(){
  return 'ok'
}
let result = fn()
// result 是一个成功的promise对象   状态:成功  结果:'ok'

抛出错误

async函数返回的promise对象 状态:失败 结果:抛出内容

async function fn(){
  throw '出错了!'
}
let result = fn()
// result 是一个失败的promise对象   状态:失败  结果:'出错了!'

返回一个promise对象

async function fn(){
  return new Promise((resolve,reject)=>{
    resolve('成功的值')
  })
}
let result = fn()
// 如果 resolve('成功的值')
// result 是一个promise对象   状态:成功  结果:'成功的值'

// 如果 reject('失败的值')
// result 是一个失败的promise对象   状态:失败  结果:'失败的值'

我的理解:
如果async函数return的不是一个promise对象,那么返回结果会被加工成promise对象
如果async函数return的恰好是一个promise对象,那么返回结果就是这个promise对象

await

await 必须放在 async 函数中,async函数中 可以没有 await
async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。

await右边的表达式一般为promise对象,如果不是promise对象就直接返回对应的值。

await右边的表达式不为promise对象

async function fn(){
  let result = await '123'
  console.log(result) // 输出 '123'
}
fn()

await右边为promise对象

await返回promise对象 成功的值

const p = new Promise((resolve,reject)=>{
  resolve('用户数据')
})

async function fn(){
  let result = await p
  console.log(result) // 输出 '用户数据'
}
fn()

如果promise对象失败就会 抛出错误 throw '失败的值'

const p = new Promise((resolve,reject)=>{
  reject('出错了')
})

async function fn(){
  // 使用try...catch捕获抛出的错误信息
  try{
    let result = await p // 这里检测到 p 的状态为失败,抛错,代码块中后面的代码不执行
    console.log(result)
  }catch(e){
    console.log(e) // 输出 '出错了'
  }
}
fn()


我的理解:
await promise对象
promise对象状态为成功 则 返回成功的值
promise对象状态为失败 则 抛出失败的值

posted @ 2022-07-19 16:46  ycccc丶  阅读(40)  评论(0编辑  收藏  举报
//背景线条