精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何優(yōu)雅地給對(duì)象的所有方法添加異常處理

開發(fā) 前端
為了保證健壯性,我們要對(duì)所有可能報(bào)錯(cuò)的代碼添加異常處理,但是每個(gè)方法都添加 try catch 又太麻煩,所以我們利用 Proxy 實(shí)現(xiàn)了代理,透明的給對(duì)象的所有方法都添加上了異常處理。

代碼不會(huì)全部按照我們的預(yù)期運(yùn)行,可能會(huì)有意料之外的情況,為了保證程序的健壯性,要進(jìn)行異常處理。

比如一個(gè)對(duì)象的所有方法,都應(yīng)該做異常處理,但是,如果每個(gè)方法都加 try catch 又太麻煩:

const obj = {
aaa() {
try {
// aaa
} catch(e) {
// xxxx
}
},
bbb() {
try {
// bbb
} catch(e) {
// xxxx
}
},
ccc() {
try {
// ccc
} catch(e) {
// xxxx
}
}
}

有沒有一種方式既能對(duì)所有方法做異常處理,又不用重復(fù)寫這么多次呢?

有,就是代理模式。

代理模式是通過(guò)對(duì)目標(biāo)對(duì)象做一層包裝,提供和目標(biāo)對(duì)象同名的方法,最終的功能實(shí)現(xiàn)還是調(diào)用目標(biāo)對(duì)象的方法,但可以額外添加一些職責(zé),比如日志、權(quán)限等,可以透明的對(duì)目標(biāo)對(duì)象做一些擴(kuò)充。

比如 React 里的高階組件就是代理模式的實(shí)現(xiàn),可以透明的擴(kuò)展被包裝的組件的功能。

很明顯,這里的異常處理,也可以用代理的方式來(lái)做。但不用完全自己實(shí)現(xiàn),ES6 提供了 Proxy,可以基于它來(lái)實(shí)現(xiàn)。

定義 createProxy 方法來(lái)實(shí)現(xiàn)代理,創(chuàng)建一個(gè) Proxy 對(duì)象,對(duì)目標(biāo)對(duì)象 target 做一層包裝,定義 get、set 時(shí)的處理:

function createProxy(target) {
const proxy = createExceptionProxy();
return new Proxy(target, {
get: proxy,
set: proxy
});
}

function createExceptionProxy() {
return (target, prop) => {
if (!(prop in target)) {
return;
}

if (typeof target[prop] === 'function') {
return createExceptionZone(target, prop);
}

return target[prop];
}
}

如果 target 不包含 prop,就返回空,否則返回對(duì)應(yīng)的屬性值 target[prop]。

如果屬性值是函數(shù),則做一層包裝

function createExceptionZone(target, prop) {
return (...args) => {
let result;
ExceptionsZone.run(() => {
result = target[prop](...args);
});
return result;
};
}

最終的功能實(shí)現(xiàn)還是調(diào)用 target,傳入?yún)?shù),把調(diào)用結(jié)果作為代理方法的結(jié)果返回。

包裝這一層的目的是為了做異常處理,也就是 ExceptionsZone.run 做的事情:

class ExceptionsZone {
static exceptionHandler = new ExceptionHandler();

static run(callback) {
try {
callback();
} catch (e) {
this.exceptionHandler.handle(e);
}
}
}

調(diào)用目標(biāo)方法,并做 try catch,當(dāng)出現(xiàn)異常的時(shí)候,用 ExceptionHandler 來(lái)處理。

這里的異常處理我們就簡(jiǎn)單打印下日志:

class ExceptionHandler {
handle(exception) {
console.log('記錄錯(cuò)誤:',exception.message, exception.stack);
}
}

這樣就實(shí)現(xiàn)了給目標(biāo)對(duì)象的所有方法添加異常處理的目的。

測(cè)試下:

const obj = {
name: 'guang',
say() {
console.log('Hi, I\'m ' + this.name);
},
coding() {
//xxx
throw new Error('bug');
}
coding2() {
//xxx
throw new Error('bug2');
}
}

const proxy = createProxy(obj);

proxy.say();
proxy.coding();

這里的 coding、coding2 方法都會(huì)拋出異常,但并沒有做異常處理,我們用代理給它加上:

我們成功地通過(guò)代理模式給對(duì)象方法添加了異常處理!

但是現(xiàn)在這樣還是有問(wèn)題的,比如我把 coding 方法改為 async 的就不行了:

那怎么辦呢?能不能統(tǒng)一對(duì)異步和同步方法做代理呢?

確實(shí)沒辦法,因?yàn)闆]法區(qū)分方法是同步還是異步,而且這兩種方法的調(diào)用方式也不同,但我們可以單獨(dú)提供一個(gè) runner 方法來(lái)運(yùn)行這些異步邏輯:

class ExceptionsZone {
static exceptionHandler = new ExceptionHandler();

static async asyncRun(callback) {
try {
await callback();
} catch (e) {
this.exceptionHandler.handle(e);
}
}
}

然后這樣運(yùn)行:

(async function() {
await ExceptionsZone.asyncRun(proxy.coding2);
})();

這樣就能處理異步邏輯中的異常了:

我們通過(guò)代理的方式給對(duì)象的所有同步方法添加了異常處理,然后又提供了運(yùn)行異步方法的 runner 函數(shù),對(duì)運(yùn)行時(shí)的異常做了處理,結(jié)合這兩種方式,優(yōu)雅地給目標(biāo)對(duì)象的所有方法加上了異常處理。

可能你會(huì)說(shuō),代理就代理,你定義這么多 class 干啥?

因?yàn)檫@段邏輯是我從 Nest.js 源碼里摘出來(lái)的,它源碼里就是這樣來(lái)給對(duì)象添加異常處理的:

異步邏輯也是單獨(dú)提供了個(gè)方法來(lái)運(yùn)行:

我覺得這個(gè)透明給對(duì)象添加異常處理的方式很優(yōu)雅,就把它從 Nest.js 源碼里抽了出來(lái)。

總結(jié)

為了保證健壯性,我們要對(duì)所有可能報(bào)錯(cuò)的代碼添加異常處理,但是每個(gè)方法都添加 try catch 又太麻煩,所以我們利用 Proxy 實(shí)現(xiàn)了代理,透明的給對(duì)象的所有方法都添加上了異常處理。

但是,代理添加的只是同步的異常處理,并沒有捕獲異步邏輯的異常,我們可以單獨(dú)一個(gè)一個(gè)函數(shù)來(lái)運(yùn)行異步方法。

結(jié)合代理 + 提供運(yùn)行異步方法的 runner 這兩種方式,就能給一個(gè)沒有做任何異常處理的對(duì)象加上異常處理。是不是很優(yōu)雅?

責(zé)任編輯:武曉燕 來(lái)源: 神光的編程秘籍
相關(guān)推薦

2022-08-03 07:07:10

Spring數(shù)據(jù)封裝框架

2023-10-10 13:23:18

空指針異常Java

2020-10-22 10:15:33

優(yōu)化Windows電腦

2019-01-24 16:11:19

前端全局異常數(shù)據(jù)校驗(yàn)

2020-02-05 14:05:21

Java技術(shù)數(shù)組

2019-11-04 14:20:47

APP版本移動(dòng)端命名

2021-03-24 10:20:50

Fonts前端代碼

2022-05-24 06:07:48

JShack用戶代碼

2024-11-13 16:37:00

Java線程池

2025-07-08 08:37:50

2024-09-26 10:51:51

2021-05-12 22:07:43

并發(fā)編排任務(wù)

2020-03-26 11:04:00

Linux命令光標(biāo)

2022-05-13 21:20:23

組件庫(kù)樣式選擇器

2021-01-18 13:17:04

鴻蒙HarmonyOSAPP

2024-04-24 12:34:08

Spring事務(wù)編程

2021-01-28 14:53:19

PHP編碼開發(fā)

2020-07-09 10:15:55

空值Bug語(yǔ)言

2019-03-14 15:59:44

前端開發(fā)編程

2009-06-26 10:07:00

Hibernate狀態(tài)
點(diǎn)贊
收藏

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

亚洲精品永久免费| 亚洲情趣在线观看| 欧美夫妻性视频| 日韩精品国产一区| 国产夫妻在线| 久久九九国产精品| 成人www视频在线观看| 中日韩一级黄色片| 99a精品视频在线观看| 久久福利资源站| 美日韩精品视频免费看| 国产成人无码一区二区在线观看| 粉嫩av一区二区三区四区五区| 亚洲综合免费观看高清完整版| 欧美精品一区二区三区久久| 99视频国产精品免费观看a | 中文字幕国产亚洲2019| 不许穿内裤随时挨c调教h苏绵| 第四色男人最爱上成人网| 亚洲精品国产视频| 亚洲精蜜桃久在线| 五月天婷婷激情网| 国产精品综合视频| 国产精品福利无圣光在线一区| 激情综合网五月婷婷| 91综合在线| 亚洲精品一区在线观看香蕉| 亚洲少妇一区二区三区| 自拍偷拍亚洲| 日本久久精品电影| 97国产精东麻豆人妻电影| a级网站在线播放| 欧美极品xxx| 欧美久久综合性欧美| 亚洲乱码在线观看| 激情丁香综合五月| 国产精品亚洲美女av网站| 中文字幕激情小说| 最新日韩av| 欧美成aaa人片免费看| 国产jizz18女人高潮| 一区二区三区日本久久久| 亚洲国产91色在线| 国产免费a级片| 亚洲一二三区视频| 日韩精品中文字幕在线不卡尤物| 欧美女同在线观看| 日韩毛片一区| 欧洲精品一区二区三区在线观看| 国产成人无码一二三区视频| 自拍一区在线观看| 色综合网站在线| 女性女同性aⅴ免费观女性恋| 17videosex性欧美| 精品久久久久久久久久久久| 欧美一级视频免费看| 国产精品一品| 香蕉成人啪国产精品视频综合网 | 日本高清不卡视频| 91av俱乐部| 日韩天堂在线| 欧美日韩五月天| 精品亚洲一区二区三区四区| 天堂久久午夜av| 欧美日韩一区高清| www.污污视频| 日本一区影院| 亚洲精品一区二区三区影院| 四虎永久免费观看| 同性恋视频一区| 亚洲人成自拍网站| 免费黄在线观看| 欧美成免费一区二区视频| 精品国产一区二区三区久久久| 午夜成人亚洲理伦片在线观看| 91精品国产自产拍在线观看蜜| 久久91亚洲人成电影网站 | 一本久久综合亚洲鲁鲁五月天| www.com毛片| 草民电影神马电影一区二区| 91麻豆精品国产91久久久久久 | 亚洲一区 在线播放| 免费在线看污片| 色综合久久天天| 色片在线免费观看| 91蜜桃臀久久一区二区| 亚洲激情自拍图| 亚洲午夜精品久久久久久高潮| 久久国产精品成人免费观看的软件| 久久精品视频中文字幕| 久久精品久久精品久久| 在线亚洲成人| 国产精品极品美女粉嫩高清在线| 91国产免费视频| 成人黄色777网| 久久综合中文色婷婷| 免费黄色在线看| 婷婷丁香激情综合| 五月天开心婷婷| 日韩影视高清在线观看| 日韩中文字幕网址| 在线能看的av| 国模一区二区三区白浆| 久久99精品久久久久久青青日本 | 青青草97国产精品免费观看| 国产成人免费av电影| 国产精品呻吟久久| 99精品视频一区| 一区二区三区四区欧美日韩| heyzo高清中文字幕在线| 欧美色图第一页| 国产伦精品一区二区免费| 欧美丝袜丝交足nylons172| 欧美精品久久久久久久久久| 伊人亚洲综合网| 北岛玲一区二区三区四区| 椎名由奈jux491在线播放| 日韩伦理精品| 日韩视频在线一区二区| 欧美福利第一页| 亚洲精品社区| av色综合网| 四虎久久免费| 在线看日本不卡| 免费日本黄色网址| 女人天堂亚洲aⅴ在线观看| 国产精品成人aaaaa网站| 色网站免费观看| 亚洲日本va午夜在线影院| 激情五月亚洲色图| 一个色免费成人影院| 97在线视频一区| 黄色小视频免费在线观看| 中文字幕日韩精品一区| wwww.国产| 色综合中文网| 国产www精品| 亚洲三区在线观看无套内射| 亚洲愉拍自拍另类高清精品| 毛毛毛毛毛毛毛片123| 91综合网人人| 国产欧美日韩综合精品| 3p视频在线观看| 欧美在线视频全部完| 成人乱码一区二区三区av| 99成人精品| 久久久久久久久四区三区| 国产桃色电影在线播放| 欧美成人vr18sexvr| 欧美成人手机视频| 精久久久久久| 成人在线看片| 新版中文在线官网| 欧美大片日本大片免费观看| 91在线播放观看| 国产精品一区二区免费不卡| 天天综合五月天| 国产亚洲久久| 久99久在线视频| 免费观看国产精品| 亚洲成人av在线电影| 亚洲天堂av网站| 国产手机视频一区二区| 美女主播视频一区| 福利一区和二区| 久久五月天综合| 亚洲女同志亚洲女同女播放| 亚洲国产精品久久久久婷婷884| 亚洲乱妇老熟女爽到高潮的片| 激情欧美日韩| 麻豆av福利av久久av| 九九九伊在线综合永久| 色偷偷噜噜噜亚洲男人| japanese国产| 精品久久久久国产| 妖精视频在线观看免费| 国内精品免费**视频| 欧美性潮喷xxxxx免费视频看| 成人性生交大片免费看96| 日本国产欧美一区二区三区| aaa在线免费观看| 日韩欧美一区在线| 久久一区二区三区视频| 国产视频一区二区在线| 欧美性受xxxx黒人xyx性爽| 精品成人一区| 天天久久人人| 香蕉免费一区二区三区在线观看| 91精品国产网站| 在线免费看a| 亚洲成人av资源网| 亚洲性猛交富婆| 一区二区三区在线视频免费观看| 亚洲欧美在线不卡| 久久电影国产免费久久电影| 婷婷五月综合缴情在线视频| 成人激情电影在线| 国产 高清 精品 在线 a| 五月天av在线| 欧美成人精品在线播放| 国产色在线 com| 日韩欧美中文字幕精品| 秋霞av一区二区三区| 一区二区三区四区视频精品免费| 亚洲黄色小说视频| 粉嫩嫩av羞羞动漫久久久| 国产wwwxx| 亚洲精品偷拍| 亚洲小说欧美另类激情| 欧美激情在线精品一区二区三区| 亚洲va码欧洲m码| 精品欧美日韩精品| 欧美激情免费在线| 毛片激情在线观看| 亚洲一区www| 天堂在线视频免费| 91精品国产综合久久精品app| 日韩欧美成人一区二区三区| 一区二区三区在线观看动漫| 大吊一区二区三区| www激情久久| 国产日韩视频一区| 国产精品一区二区在线观看网站| 欧美国产综合在线| 你懂的国产精品| 亚洲一区二区三区欧美| 国产精品密蕾丝视频下载| 国产在线精品一区| aaa国产精品视频| 国产又爽又黄的激情精品视频| 日韩成人动漫| 91av视频导航| 国产www视频在线观看| 久青草国产97香蕉在线视频| 在线播放毛片| 色综合伊人色综合网| 成人h小游戏| 在线观看欧美www| 国产经典自拍视频在线观看| 亚洲精选中文字幕| 天堂av中文在线资源库| 亚洲精品国产精品自产a区红杏吧| а√天堂资源在线| 精品久久久三级丝袜| 亚洲av无码国产精品永久一区 | 91麻豆国产视频| 欧美性xxxxxxxx| 中文字幕永久免费视频| 欧美亚洲综合色| 中文字幕乱码中文字幕| 欧美视频在线播放| 91无套直看片红桃| 7777精品伊人久久久大香线蕉超级流畅| 中文字幕一区二区三区波野结 | 欧美精品成人在线| 福利在线导航136| 国语自产偷拍精品视频偷 | 6080国产精品| 国产美女精品一区二区三区| 亚洲第一成肉网| 国产精品99久久久久久宅男| 人妻精油按摩bd高清中文字幕| 国产成人免费视频网站| 成人在线电影网站| 91捆绑美女网站| 真实乱视频国产免费观看| 国产精品区一区二区三区| 亚洲一级理论片| 亚洲精品欧美在线| 国产主播在线观看| 色婷婷综合五月| 一区二区久久精品66国产精品| 欧美一级片在线看| 六月丁香色婷婷| 亚洲欧美精品一区二区| 免费网站看v片在线a| 欧美人成在线视频| 在线高清av| 国产精品尤物福利片在线观看| 精品一级视频| 精品亚洲第一| 天天色天天射综合网| 日本五级黄色片| 老司机精品久久| 成人黄色一级大片| 成人动漫一区二区| 第一次破处视频| 一区二区三区 在线观看视频| 国产又色又爽又黄的| 精品视频999| 欧美熟女一区二区| 在线国产精品播放| 国产极品人妖在线观看| 国产精品流白浆视频| 一区二区三区在线免费看| 日韩激情视频| 在线观看视频免费一区二区三区| 日韩手机在线观看视频| 国产经典欧美精品| 中国女人特级毛片| 亚洲成人你懂的| 国产精品毛片一区视频播| 日韩精品免费在线播放| free性欧美hd另类精品| 国产成人高清激情视频在线观看| 少妇精品在线| 亚洲一区二区精品在线观看| 亚洲一区二区三区高清| 亚洲av无一区二区三区久久| 国产亚洲成aⅴ人片在线观看 | 免费不卡的av| 国产精品高潮呻吟| 久久亚洲精品石原莉奈| 亚洲成年人影院在线| 黄色网在线播放| 国产精品久久久久久久久久小说 | 九色综合国产一区二区三区| 午夜视频在线观看国产| 亚洲精品久久嫩草网站秘色| 中文字幕一区二区免费| 亚洲午夜精品视频| 男人久久天堂| 国产精品乱码| 欧美福利电影在线观看| 不卡的在线视频| 成人免费看片载| 亚洲最大的成人av| 国产美女自慰在线观看| 久久精品中文字幕电影| 日本一区免费网站| 欧美性大战久久久久| 亚洲经典三级| 亚洲av成人片无码| 亚洲综合999| 亚洲第一天堂在线观看| 欧美成人一区二区三区电影| 日韩免费大片| 在线成人av电影| 美腿丝袜亚洲综合| 欧美成人短视频| 欧美精选午夜久久久乱码6080| 成年人视频在线观看免费| 秋霞av国产精品一区| 夜夜春成人影院| av免费在线播放网站| 国产午夜精品理论片a级大结局 | 亚洲自拍另类| 91av在线免费| 日韩人体视频一二区| 黄色影院在线播放| 国产99久久精品一区二区永久免费 | 国产精品久久久久久久久久久久久| 台湾亚洲精品一区二区tv| 欧美 日韩 国产在线观看| 9久草视频在线视频精品| 日韩黄色三级视频| 日韩精品中文字幕在线观看 | 亚洲一区欧美一区| 好吊色一区二区三区| 国内精品久久久久影院优| 国产图片一区| 亚洲熟妇av一区二区三区漫画| 久久奇米777| 久久精品国产亚洲av麻豆蜜芽| 在线日韩av观看| 日韩在线亚洲| 你懂的av在线| 久久久美女艺术照精彩视频福利播放| 亚洲视频 欧美视频| 爽爽爽爽爽爽爽成人免费观看| 综合久久av| 黄网站欧美内射| 国产午夜精品在线观看| 国产又黄又大又粗的视频| 欧美另类第一页| 色综合www| 中文字幕 日韩 欧美| 一区二区三区四区在线免费观看 | 一区二区三区精品99久久| 欧美啪啪网站| 国产精品自拍合集| 91麻豆精东视频| 一级黄色片在线| 韩国日本不卡在线| 日韩精品一区二区久久| 人妻 丝袜美腿 中文字幕| 一本到一区二区三区| 超碰在线最新| 欧美精品一区在线发布| 国产精品夜夜嗨| 中文在线第一页| 久久韩剧网电视剧| 亚洲精品国产动漫| 99精品视频国产| 一本色道久久综合狠狠躁的推荐| gogogogo高清视频在线| 欧美中文娱乐网| 成人黄色av电影| 国产精品一区二区黑人巨大| 日本高清视频精品|