1. 程式人生 > >es6非同步之await和async非同步

es6非同步之await和async非同步

手上的專案寫好的介面已經對接完了。最近閒下來了,上家公司的主管跟我提起了前端和node.js。node必定是以後前端的一項重要技術。這次不再看視訊從基礎開始了,直接看自己需要的東西。

說到非同步就會想到promise,在es6中的await和async也是非同步操作。

await 和 async是建立在 promise機制之上的。不能說有了await和async就不要promise。
async

用來表示函式是非同步的,定義的函式會返回一個promise物件,可以使用then方法添加回調函式。
await

可以理解為是 async wait 的簡寫。await 必須出現在 async 函式內部,不能單獨使用。
await 最主要的意圖是用來等待 Promise 物件的狀態被 resolved後才繼續執行。(也可以不是Promise物件)
await 對於reject的處理將程式碼包裹在try{//程式碼}catch(err){}

下面是一段簡單的示例

const wait1 = () => {
    return new Promise(resolve => {
        resolve(setTimeout(() => {
            console.log('第一個wait')
        },1000))
    })
}
const wait2 = () => {
    return new Promise(resolve => {
        resolve(setTimeout(() => {
            console.log('第二個wait')
        },2000))
    })
}
async function test() {
    const a = await wait1()
    const b = await wait2()
    console.log("end")
}
console.log("start")
test()

執行方式如下:

C:\Users\Administrator.SKY-20170401TQI\Desktop\IT\node.js\koa2>node server.js
start
end
第一個wait
第二個wait

wait1和wait2是定義好的非同步函式。