不管是使用koa仍是node,咱們都會遇到大量都異步處理,在以前咱們處理異步都方法是使用回調函數,但是那樣既不美觀也很很不容易後期維護。因而async函數出現了,咱們能夠用同步的方式來調用異步方法。前端
async function asyncF() {
return 'I am a async result'
}
let async_result = asyncF()
console.log(async_result)
複製代碼
Promise { 'I am a asyncSync result' }
複製代碼
這裏返回的是一個promise對象,這是es6裏面的類型,在promise對象裏面有一個then方法,在then方法裏面咱們能夠拿到promise對象返回的值。咱們來試試node
async_result.then((res) => {
console.log(res)
})
複製代碼
I am a asyncSync result
複製代碼
await必須配合async使用,顧名思義,是async wait (等待異步)的意思。es6
// 定義一個睡覺函數
function sleep(ms){
return new Promise((resolve,reject)=>{
setTimeout((ms)=>{
resolve('睡覺了'+ms+'ms')
},ms)
})
}
// 定義一個async函數
async sleeptime(ms)=>{
const start = Date.now() //開始時間
await sleep(ms)
const end = Date.now()
console.log(end-start+'ms')
}
sleeptime(3000) //睡覺3000ms
複製代碼
結果promise
// 打印結果也是3000ms
3000ms
複製代碼
await通常在等待async方法執行完畢,可是其實await等待的只是一個表達式,這個表達式在官方文檔裏說的是Promise對象,但是它也能夠接受普通值。bash
async function testAsync() {
return 'testAsync'
}
async function testAwait2() {
let time1 = Date.now()
await '1233'
let time2 = Date.now()
console.log(`cost ${time2 - time1} ms`)
await delayF()
let time3 = Date.now()
console.log(`cost ${time3 - time2} ms`)
await testAsync()
let time4 = Date.now()
console.log(`cost ${time4 - time3} ms`)
}
testAwait2()
複製代碼
結果session
cost 1 ms
cost 3002 ms
cost 1 ms
複製代碼
歡迎指出不足,我會補充上去,還在持續更新。記錄學習過程。koa
小強前端交流羣QQ羣:724179055異步
定時分析技術和資料,歡迎你們進來一塊兒交流。async
往期回顧地址:函數