使用 async await 配合 promise是解決回調地獄的終極方法 async/await特點
1, async/await更加語義化,async 是“異步”的簡寫,async function 用于申明一個 function 是異步的; await,可以認為是async wait的簡寫, 用于等待一個異步方法執行完成;
2, async/await是一個用同步思維解決異步問題的方案(等結果出來之后,代碼才會繼續往下執行)
3, 可以通過多層 async function 的同步寫法代替傳統的callback嵌套 async function語法
1)自動將常規函數轉換成Promise,返回值也是一個Promise對象
2)只有async函數內部的異步操作執行完,才會執行then方法指定的回調函數
3)異步函數內部可以使用await await語法
await 放置在Promise調用之前,await 強制后面點代碼等待,直到Promise對象resolve,得到resolve的值作為await表達式的運算結果
await只能在async函數內部使用,用在普通函數里就會報錯
函數形式 function timeout(ms) { return new Promise((resolve, reject) => { setTimeout(() => {reject('error')}, ms); //reject模擬出錯,返回error }); } async function asyncPrint(ms) { try { console.log('start'); await timeout(ms); //這里返回了錯誤 console.log('end'); //所以這句代碼不會被執行了 } catch(err) { console.log(err); //這里捕捉到錯誤error } }