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,也会被封装成Promise
	console.log('res2',res2)//400
})()

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

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

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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐