前言
node.js的世界,從callback開始,不會止于async.
本文將給大家詳細介紹關于async/await優雅的錯誤處理的相關內容,下面話不多說了,來一起看看詳細的介紹吧
async/await優雅的錯誤處理
一般情況下 async/await 在錯誤處理方面,主要使用 try/catch,像這樣
const fetchData = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve('fetch data is me') }, 1000) })}(async () => { try { const data = await fetchData() console.log('data is ->', data) } catch(err) { console.log('err is ->', err) }})()這么看,感覺倒是沒什么問題,如果是這樣呢?有多個異步操作,需要對每個異步返回的 error 錯誤狀態進行不同的處理,以下是示例代碼
const fetchDataA = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve('fetch data is A') }, 1000) })}const fetchDataB = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve('fetch data is B') }, 1000) })}const fetchDataC = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve('fetch data is C') }, 1000) })}(async () => { try { const dataA = await fetchDataA() console.log('dataA is ->', dataA) } catch(err) { console.log('err is ->', err) } try { const dataB = await fetchDataB() console.log('dataB is ->', dataB) } catch(err) { console.log('err is ->', err) } try { const dataC = await fetchDataC() console.log('dataC is ->', dataC) } catch(err) { console.log('err is ->', err) }})()這樣寫代碼里充斥著 try/catch,有代碼潔癖的你能忍受的了嗎?這時可能會想到只用一個 try/catch。
// ... 這里 fetch 函數省略(async () => { try { const dataA = await fetchDataA() console.log('dataA is ->', dataA) const dataB = await fetchDataB() console.log('dataB is ->', dataB) const dataC = await fetchDataC() console.log('dataC is ->', dataC) } catch(err) { console.log('err is ->', err) // 難道要定義 err 類型,然后判斷嗎?? /** * if (err.type === 'dataA') { * console.log('dataA err is', err) * } * ...... * */ }})()如果是這樣寫只會增加編碼的復雜度,而且要多寫代碼,這個時候就應該想想怎么優雅的解決,async/await 本質就是 promise 的語法糖,既然是 promise 那么就可以使用 then 函數了
(async () => { const fetchData = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve('fetch data is me') }, 1000) }) } const data = await fetchData().then(data => data ).catch(err => err) console.log(data)})()在上面寫法中,如果 fetchData 返回 resolve 正確結果時,data 是我們要的結果,如果是 reject 了,發生錯誤了,那么 data 是錯誤結果,這顯然是行不通的,再對其完善。
新聞熱點
疑難解答
圖片精選