国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

async/await優雅的錯誤處理方法總結

2024-05-06 15:42:47
字體:
來源:轉載
供稿:網友

前言

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 是錯誤結果,這顯然是行不通的,再對其完善。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 昆明市| 鄯善县| 大邑县| 韶关市| 庄浪县| 江孜县| 凤阳县| 乌什县| 德令哈市| 靖安县| 开阳县| 临沧市| 河曲县| 安吉县| 南汇区| 会昌县| 沂水县| 宁明县| 呼图壁县| 兴山县| 商洛市| 莱州市| 桃园市| 黑河市| 临夏市| 古丈县| 淅川县| 万荣县| 牟定县| 弥渡县| 保定市| 伊宁市| 临澧县| 朝阳区| 五指山市| 九寨沟县| 秭归县| 桂阳县| 苍梧县| 余干县| 宜阳县|