1.async和await?
async/await主要用於進行異步請求。
1.1被async修飾的函數是異步函數,異步函數就是代碼執行起來不會阻塞后面后面代碼的進程。
1.3async返回一個Promise對象,await等待一個Promise對象,而await等待的就是async返回的Promise對象返回的結果。
async返回一個promise對象
要是想得async函數的結果,用.then()和.catch()方法來注冊回調函數
注意:若異步函數內部返回的是一個直接量,則async會把這個直接量用Promise.resolve轉成Promise對象
總結:async函數執行返回一個Promise對象,並把函數內部的值用Promise.resolve進行了封裝
2.await等待
2.1 await放在異步函數內部,await后面跟一個表達式,一般都是Promise對象的表達式
2.2 在async函數執行過程中,遇到await關鍵字時會先暫停,等觸發的異步操作完成后,在執行async函數。
function test1(){ console.log("test1") }; async function test(){ const res=await test1() console.log("test") } test();//test1 test
3.2await等到是后邊表達式的結果 返回的結果有兩種①Promise對象②不是promise對象
①Promise對象
如果等待的對象是promise,會暫停await后面的執行,先執行async外部的同步代碼,然后再執行內部的代碼,並將得到的結果直接作為await的結果。
②非Promise對象
如果等待的是Promise對象,同樣會暫停await后面的執行限制性async外部的同步代碼,等着 Promise 對象 fulfilled,然后把 resolve 的參數作為 await 表達式的運算結果。
3.異常捕獲
try/catch捕獲異常
async function test(){ const res=await test1().catch((err)=>{ console.log(new Error) }) console.log("test") }
async function test(){ try{ const res=await test1() }catch(err){ console.log(err) } console.log("test") }