Js處理非同步async/await
阿新 • • 發佈:2018-12-10
async
- 首先async內部實現原理就是Promise
- 將返回一個Promise物件,所以獲取async的返回值需使用.then方法
- 當async內部丟擲異常狀態, Promise 物件變為reject狀態,使用catch 方法進行捕獲
async函式在執行過程中,後續程式碼也開始執行。
async function notnow(){ return "我執行時,後續程式碼已經開始執行" } notnow().then(res => {console.log(res)}) //then獲得resolved結果 console.log("我比上邊先跑") async function notnow(a){ if(a){ return "我是resolved的結果" }else{ throw "我是異常的結果,不使用catch會報錯" } } notnow(false).catch(err => {console.log(err)})
await
- await 只能放到async 函式裡。
- 表示緊跟在後面的表示式需要等待結果才能執行。
下面看一段程式碼
function justwait2s(a){ return new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve(a*2) },2000) }) } async function test(){ let answer = await justwait2s(2); console.log(answer); console.log("我是不是先跑呢?") } test();
兩秒後輸出 //4 //我是不是先跑呢
對比上面的情況,遇到await 之後,程式碼就暫停執行了, 等待await執行完畢後,後續程式碼才會執行