console.dir(Promise);
const p = new Promise((resolve, reject) => {
reject("失敗");
resolve("成功!");
})
async function getA(){
// await后是一個Promise,如果不是也會默認轉為一個Promise
// 如果Promise執行結果為resolve,則await返回resolve參數,await下面的代碼都會執行,且async函數后的then中返回的是async函數return后的值
// 如果Promise執行結果為reject,則await無返回值,await下面的代碼不會執行,且async函數后的catch會捕獲到reject中的值
const a = await p;
console.log(a);
console.log("這里是a之后的代碼");
return 666;
}
getA().then((res)=>{
console.log(res);
}).catch((error)=>{
console.log(error);
});
1、async函數總是會返回一個promise
返回一個promise有三種情形:
1)async函數中顯示的return一個promise;
2)如果return的是一個具體值,則會轉換為一個resolve為該值的promise;
3)其它則會轉換為一個resolve為undefined的promise。
2、await后面跟什么?
1)promise,此時如果promise執行結果為resolve,則await返回resolve中的值,如果promise執行結果為reject,則await無返回值;
2)具體值,此時await返回的就是該值。
3、錯誤處理:
當await后的promise返回的是reject時會報錯,報錯后不會繼續往下執行,除非我們進行以下幾種錯誤處理方式:
1)直接在await處進行錯誤處理,但await返回undefined,async函數再繼續往下執行;
2)在async函數執行處添加錯誤處理,則碰到第一個await后的promise返回reject時會進行錯誤處理,但async函數不會繼續往下執行;
3)將async中的Promise操作都放在try{}catch{}中。
