koa2學習筆記(三)async/await

async

不管是使用koa仍是node,咱們都會遇到大量都異步處理,在以前咱們處理異步都方法是使用回調函數,但是那樣既不美觀也很很不容易後期維護。因而async函數出現了,咱們能夠用同步的方式來調用異步方法。前端

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

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

複製代碼

總結

  • async是聲明一個異步的函數,返回一個promise對象。
  • await是等待一個表達式(promise)的返回值執行完畢,必須結合async使用。
  • 寫在await後面的方法都會等待await中的異步方法執行完畢以後再執行。

最後

歡迎指出不足,我會補充上去,還在持續更新。記錄學習過程。koa

小強前端交流羣QQ羣:724179055異步

定時分析技術和資料,歡迎你們進來一塊兒交流。async

往期回顧地址:函數

相關文章
相關標籤/搜索