(async () => { const fetchData = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve('fetch data is me') }, 1000) }) } // 抽離成公共方法 const awaitWrap = (promise) => { return promise .then(data => [null, data]) .catch(err => [err, null]) } const [err, data] = await awaitWrap(fetchData()) console.log('err', err) console.log('data', data) // err null // data fetch data is me })()
記住,async 函數總是返回 promise。只要函數中有異常,Promise 會 reject。而且,如果一個 async 函數返回的是一個 reject 的 Promise,那麼這個 Promise 依然會繼續被 reject。