Async/await

pardon110發表於2019-12-29

Koa中大量使用了非同步組合語法async/await,本文簡要闡述了這種神操作

Code

先在chrome裡執行下面這段程式碼

function getSyncTime() {
    return new Promise((resolve,reject)=>{
        try{
            let startTime = new Date().getTime()
            setTimeout(()=>{
                let endTime = new Date().getTime()
                let data = endTime - startTime
                resolve(data)
            },500)
        }catch(err){
            reject(err)
        }
    })
}

async function getSyncData(){
    // 解析非同步promise
    let time = await getSyncTime()
    let data = `endTime - startTime = ${time}`
    return data
}

async function getData(){
    let data = await getSyncData()
    console.log(data)
}

getData()
console.log('test....')

console輸出效果

test....
Promise {<pending>}
endTime - startTime = 502

async/await

  • 可以讓非同步邏輯用同步寫法實現
  • 最底層的 await 返回需要是 Promise物件
  • 可以通過多層 async function 的同步寫法代替傳統的callback 巢狀

node vs golang

node事件迴圈,顯然是在當前輪事件執行緒上下文執行完自動呼叫非同步任務
golang則是若主goroutime無阻塞退出後,則其它非同步goroutine則無機會進行執行。

相關文章