成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不要一直使用try-catch啦!三種async/await錯誤捕獲方式

開發(fā) 前端
async + await? 可以讓 異步的操作擁有同步的寫法。所以在日常開發(fā)中,通過 async + await 來處理異步編程(比如:接口請求)是非常常見的一種方案。

Hello,大家好,我是 Sunday。

async + await 可以讓 異步的操作擁有同步的寫法。所以在日常開發(fā)中,通過 async + await 來處理異步編程(比如:接口請求)是非常常見的一種方案。

但是,只要是異步操作,那么就會存在出現(xiàn) 錯誤 的可能。當(dāng) promise 出現(xiàn)錯誤時,我們可以直接通過 .catch 的方式進行捕獲,那么 async + await 應(yīng)該怎么做呢?每次都使用 try-catch 進行完整的包裹嗎?有沒有更好地方案呢?

今天這篇文章,咱們就來說下這個問題~

01:使用 try/catch 進行捕獲

function getUserInfo() {
     return new Promise((resolve, reject) => {
         setTimeout(() => {
             reject('請求出現(xiàn)錯誤')
         }, 1000)
     })
}

async function loggedIn() {
     try {
         // 執(zhí)行中斷
         let userInfo = await getUserInfo()
         console.log('不會繼續(xù)執(zhí)行')
     } catch(e) {
         console.log(e)
     }
}
loggedIn()

上面的代碼在執(zhí)行時,會通過 try-catch 捕獲到“請求異常”并中斷執(zhí)行g(shù)etUserInfo。這也是日常開發(fā)中常見處理方式。

但是如果我們存在多次的請求,就必須要通過多次的 try-catch 進行捕獲,特別是在請求需要具備連續(xù)性的時候:

async function loggedIn() {
     try {
         let userInfo = await getUserInfo()
         console.log('不會繼續(xù)執(zhí)行')
         let pageInfo = await getPageInfo(userInfo?.userId)
     } catch(e) {
         console.warn(e)
     }
}
loggedIn()

這樣的處理,在當(dāng)前場景下并沒有什么問題,但是如果每一個接口的請求都這么進行調(diào)用,那么就會顯得冗余了。所以,我們就可以延伸出一些其他的處理方案。

02:直接捕獲

function getUserInfo() {
     return new Promise((resolve, reject) => {
         setTimeout(() => {
             reject('請求出現(xiàn)錯誤')
         }, 1000)
     })
}

async function loggedIn() {
     let userInfo = await getUserInfo().catch(e => console.log(e))
     console.log('程序會繼續(xù)執(zhí)行')
     if (!userInfo) return
     let pageInfo = await getPageInfo(userInfo?.userId)
}
loggedIn()

在上面的代碼中,我們通過 catch捕獲了異常,但程序會繼續(xù)執(zhí)行,所以我們只需要在后續(xù)進行 if 判斷,從而完成連續(xù)的邏輯。

如果你不希望程序繼續(xù)執(zhí)行,那么可以按照下面的方式進行處理

function getUserInfo() {
     return new Promise((resolve, reject) => {
         setTimeout(() => {
             reject('請求出現(xiàn)錯誤')
         }, 1000)
     })
}

async function loggedIn() {
     let userInfo = await getUserInfo().catch(e => {
         console.log(e)
         return Promise.reject(e)
     })
     console.log('程序不會繼續(xù)執(zhí)行')
     let pageInfo = await getPageInfo(userInfo?.userId)
}
loggedIn()

這種方式會執(zhí)行通過 在catch塊中的Promise.reject(e)來中斷執(zhí)行。

如何選擇?

1、如果錯誤不需要中斷程序執(zhí)行,那么可以使用如下方式

let userInfo = await getUserInfo().catch(e => console.log(e))
if (!userInfo) return

2、如果發(fā)生錯誤時需要中斷,并且通過控制臺明確一個統(tǒng)一的錯誤

try {
   let userInfo = await getUserInfo()
   console.log('不會繼續(xù)執(zhí)行')
   let pageInfo = await getPageInfo(userInfo?.userId)
} catch(e) {
   console.warn(e)
}

3、如果發(fā)生錯誤時需要中斷,但是不需要控制臺顯示統(tǒng)一的錯誤

let userInfo = await getUserInfo().catch(e => {
   console.log(e)
   return Promise.reject(e)
})
console.log('程序不會繼續(xù)執(zhí)行')
let pageInfo = await getPageInfo(userInfo?.userId)
責(zé)任編輯:武曉燕 來源: 程序員Sunday
相關(guān)推薦

2017-11-02 15:26:10

JavaScriptasync錯誤

2020-09-27 07:48:40

不用try catch

2025-04-29 08:05:00

JavaScript錯誤處理開發(fā)

2009-07-21 14:30:38

Scalatry-catch

2024-06-25 10:37:11

2024-05-24 08:59:15

2025-01-16 12:00:00

try-catchfor循環(huán)

2024-12-30 08:22:35

2024-11-04 08:20:00

try-catch編程

2024-05-07 07:58:47

C#程序類型

2024-11-11 11:33:57

2024-03-05 18:15:28

AsyncAwait前端

2025-02-12 12:00:00

前端try-catchJavaScrip

2021-01-05 07:54:55

事項trycatch

2020-05-29 08:14:49

代碼Try-Catch程序員

2021-11-26 11:07:14

cowsay命令Linux

2024-12-02 11:07:24

Java代碼機制

2020-10-14 12:10:22

Javatry-catch代碼

2022-01-25 12:14:39

面試try-catch代碼

2012-07-22 15:59:42

Silverlight
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品视频二区 | 91精品国产91久久综合桃花 | 看毛片的网站 | 欧美高清视频 | 国产精品亚洲精品久久 | 国产精品久久久久久妇女6080 | 日韩在线观看一区二区三区 | 中文字幕成人av | 日韩欧美国产成人一区二区 | 一a级片| 黄网站免费在线 | 国产视频中文字幕在线观看 | 国产三区精品 | 黄色毛片网站在线观看 | 蜜桃一区二区三区 | av在线免费观看网站 | 国产精品成人在线 | 国产精品国产精品国产专区不卡 | 欧美一卡二卡在线观看 | 亚洲久草视频 | 日日操视频 | 99久久免费精品国产男女高不卡 | 国产精品片aa在线观看 | 久久99国产精一区二区三区 | 国产精品99视频 | 国产美女精品视频免费观看 | 国产精品小视频在线观看 | 亚洲一区二区三区在线视频 | 国产一区二区不卡 | 国产精品视频一二三区 | 亚洲国产精品成人无久久精品 | 超碰导航 | 欧美精品欧美精品系列 | 久久久久国产精品一区二区 | 9色网站 | 狠狠操在线 | 97国产超碰 | 干一干操一操 | 久久精品视频在线观看 | 成人午夜影院 | 理论片午午伦夜理片影院 |