async函數在使用上很簡單,我們來看一下下面的例子
async function add(a,b){ return a+b } add(1,2).then((res) =>{ consoel.log(res); //3 })
在上面的例子中我們可以看到。async返回的是一個 prominse對象。可以想prominse一樣使用。then的方法
還有一個特性,在async里有await 這個關鍵字。他是專屬async的方法如果在函數外就會報錯
在函數運行中遇到await會先把異步回調執行完成再去執行下面的內容。看下面這個例子
function wa(){ return new Promise((resolve, reject) => { console.log('你'); setTimeout(function(){ resolve('回來了'); }) }); } async function aw(){ await wa().then(res => console.log(res)) console.log('歡迎回家'); } aw().then(res=>{ console.log('咳咳'); })
它運行出來的結果就是
你
回來了
歡迎回家
咳咳
這樣我們就可以很好的控制異步回調的內容。看下面的例子
function fun1(){ return new Promise((resolve,reject) =>{ setTimeout(function(){ resolve('1'); },3000) }) } function fun2(){ return new Promise((resolve,reject) => { setTimeout(function(){ resolve('2'); },2000) }) } async function all(){ await fun1().then((res) =>{console.log(res)}); await fun2().then((res) =>{console.log(res)}); return '執行完成了' } all().then((res) =>{ console.log(res); }) //1 //2 //執行完成了
上面的代碼我們想讓在fun1執行完成以后再去執行fun2就可以使用這樣的方法,這樣要比嵌套的寫法好進行維護。
這也是解決回調地獄的方法之一。