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