当前位置: 代码迷 >> 综合 >> async/await和Promise的关系
  详细解决方案

async/await和Promise的关系

热度:85   发布时间:2023-10-11 14:39:30.0

async/await和Promise的关系

  • async/await 是消灭异步回调的终极武器
  • 但是和Promise互不相斥
  • 两者相辅相成

相辅相成:

  • 执行async函数,返回的是Promise对象
  • await相当于Promise的then
  • try…catch 可捕获异常,代替了Promise的catch

执行async函数,返回的是Promise对象

async function fn1(){
    return 100 //相当于return Promise.resolve(100)// return Promise.resolve(200)
}
const res1=fn1()//执行async函数,返回的是一个Promise对象,比如上面的return 100封装成了一个Promise对象进行返回
console.log('res1',res1)//Promise对象
res1.then(data=>{
    console.log('data',data)//100
})
//可以用const data= await fn1()接收data值 使用await,要和async配套

await相当于Promise的then

!( async function(){
    const res2=Promise.resolve(100)//相当于上面例子的res1 也就是fn1()const data= await res2 //await相当于Promise的then res1.then(data=>{})console.log('data',data)//100
})()!( async function(){
    const res2=await 400 //await Promise.resolve(400) await后面不跟Promise,也会被封装成Promiseconsole.log('res2',res2)//400
})()

try…catch 可捕获异常,代替了Promise的catch

!( async function(){
    const p4=Promise.reject('err')//rejected状态try{
    const res=await p4 //await相当于then,但是reject不会触发thenconsole.log(res) //不会输出,因为const res=await p4被报错,被catch捕获} catch(ex){
    console.error(ex)//try...catch 相当于Promise的catch}})()

总结:async封装Promise,await相当then,try…catch相当于catch

  相关解决方案