1. 程式人生 > >Js處理非同步async/await

Js處理非同步async/await

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執行完畢後,後續程式碼才會執行