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則無機會進行執行。