Async/Await應該是目前最簡單的異步方案了,ES7 中新增了 async/await 兩個關鍵詞。async 能夠聲明一個異步函數,此函數須要返回一個 Promise 對象。await 能夠等待一個 Promise 對象 resolve,並拿到結果。 一個栗子:異步
console.log(1); console.log(2); setTimeout(function(){ console.log(3) },3000); console.log(4); console.log(5)
上邊的打印結果你們想必都知道,這是同步狀態下的執行順序async
function p1(){ return new Promise(function(resolve,reject){ setTimeout(function(){ console.log("p1_2000"); resolve() },3000) }) } function p2(){ return new Promise(function(resolve,reject){ setTimeout(function(){ console.log("p2_2000"); resolve() },2000) }) } console.log("start"); p1(); p2(); console.log(end) //start //end //p2_2000 //p1_3000
我們想作的是讓他按這個順序執行下來我們就要用到async、await函數
看代碼code
function p1(){ return new Promise(function(resolve,reject){ setTimeout(function(){ console.log("p1_3000"); resolve() },3000) }) } function p2(){ return new Promise(function(resolve,reject){ setTimeout(function(){ console.log("p2_2000"); resolve() },2000) }) } //await 只能出如今異步函數裏 async function shi(){ console.log("start") await p1(); await p2(); console.log("end") } p3=shi(); p3.then(function(){ console.log("結束") })
上邊函數執行下來就是按照那個順序下來的,你們記住await 只能出如今異步函數裏!配套使用對象