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{}中。