當前位置:網站首頁>ES6新增語法(七)——async

ES6新增語法(七)——async

2022-05-13 12:28:50InfoQ

}

expression 是一個Promise對象或一個需要等待的值,針對所跟不同錶達式,有兩種處理方式:

對於Promise對象,await會阻塞主函數執行,等待Promise對象執行resolve之後,resolve返回值作為await錶達式運算結果,然後繼續向下執行。

對於非Promise對象,可以是字符串、布爾值、數值以及普通函數等。await直接返回對應的值,而不是等待其執行結果。

await等待Promise對象實例如下:

async?function?test1(){

console.log("執行")

return?new?Promise((r 
《大廠前端面試題解析+Web核心總結學習筆記+企業項目實戰源碼+最新高清講解視頻》無償開源 徽信搜索公眾號【編程進階路】
 esolve,reject)=>{

setTimeout(()=>{

console.log("延遲3秒之後返回成功")

resolve({a:'1'})

},3000)

})??

}

async?function?test2(){

let?x?=?await?test1()

console.log("x",x)//{a:?"1"}

return?x

}

test2().then(function(res){

console.log("res",res)//{a:?"1"}

})

await 跟 普通函數 實例如下:

function test3(){

console.log("普通函數")

}

async function test4(){

await test3()

console.log("直接執行")

}

test4()

捕獲异常

====

上述的await後跟Promise對象,我們知道Promise有兩種狀態,resolved() 和 rejected() ,如果Promise對象變為rejected,會如何處理?

function testAwait(){

return Promise.reject("error");

}

async function test1(){

await testAwait();

console.log("test1");//沒有打印

}

test1().then(v=>{

console.log(v);

}).catch(e=>{

console.log(e);//"error"

})

從上實例執行結果發現,返回的reject狀態被外層的catch捕獲,然後終止了後面的執行。但是在有些情况下,即使出錯了我們還是繼續執行,而不是中斷,此時我們借助try...catch捕獲內部异常。

function test1(){

return new Promise((resolve,reject)=>{

reject("error")

})

}

async function test2(){

try{

await test1()

}catch(e){

console.log("報錯",e)

}

}

版權聲明
本文為[InfoQ]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/133/202205131225156519.html

隨機推薦