es6有兩個新的異步語法,一個是async,await,一個是promise,二者我更青睞於async,await,緣由很簡單,async,await語法糖讓代碼更清晰,更直觀。
簡單的講一下,async函數返回一個 Promise 對象,能夠使用then方法添加回調函數。當函數執行的時候,一旦遇到await就會先返回,等到異步操做完成,再接着執行函數體內後面的語句。那其實就是說在async函數內,每當遇到await關鍵字的時候,函數就是阻塞住,必須等到異步操做有結果時纔會往下繼續執行,思考下,咱們關心的異步返回的結果,那麼也就是說咱們能夠異步函數執行的結果儲存起來,在須要的時候再去await,看下面的代碼es6
function asyncAfun() { return new Promise((resolove)=>{ setTimeout(function() { resolove(123); }, 3000); }) } function asyncBfun() { return new Promise((resolove)=>{ setTimeout(function() { resolove(456); }, 3000); }) } async function test () { let a = asyncAfun();//不阻塞 let b = asyncBfun();//不阻塞 let _a = await a; //這裏等待a的返回 後面能夠do something let _b = await b;//這裏等待b的返回 後面能夠do something }
那麼當你須要同時併發大量請求,而且等待全部的請求結果完成的時候能夠這麼寫promise
async function test () { let a = asyncAfun(); let b = asyncBfun(); let _a = await a; let _b = await b; Promise.all([_a,_b]).then(v=>{ console.log(v) }) }
Promise.all的做用能夠去MDN查,相似的還有Promise.race併發
學以至用,以上異步