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

首頁 > 開發(fā) > JS > 正文

Nodejs異步回調(diào)之異常處理實(shí)例分析

2024-05-06 16:45:00
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Nodejs異步回調(diào)之異常處理。分享給大家供大家參考,具體如下:

目前我們項(xiàng)目的Nodejs異常是通過express next 到 errorhandler 中間件去處理的,

原本以為此方法可以捕獲到所有的異常,但事實(shí)發(fā)現(xiàn)并非如此。

下面以一個(gè)異常舉例子:

req.get('',function(req, res, next){ var a = undefined.b; // 產(chǎn)生了一個(gè)exception})req.use(function(){req, res, next}{ next(); //最終到 errorhandler中間件中處理})

上面這個(gè)例子中,我們?nèi)藶榈闹圃炝艘粋€(gè)excepteion,同時(shí)我們期望的結(jié)果是異常能進(jìn)入到我們寫好的handler中去做處理。

從上面代碼的運(yùn)行結(jié)果來看,也符合我們的預(yù)期。

如果換個(gè)地方拋出異常,結(jié)果就不是我們想要的了。

req.get('',function(req, res, next){ redis.get('key', function(){  var a = undefined.b; // 產(chǎn)生了一個(gè)exception })})req.use(function(){req, res, next}{ next(); //最終到 errorhandler中間件中處理})

上面的代碼拋出的異常并不會(huì)被express捕獲,也不會(huì)被next到我們的錯(cuò)誤處理器中,而是會(huì)下面的代碼捕獲

process.on('uncaughtException', uncaughtExceptionHandler);

所以,nodejs中,異步回調(diào)中的異常是無法被外圍的try catch捕獲的。

req.get('',function(req, res, next){ try{  redis.get('key', function(){   var a = undefined.b; // 產(chǎn)生了一個(gè)exception  }) }catch(e){  //并不會(huì)進(jìn)到這里來 }})

解決方案:

1. Promise

function promiseFun() { return new Promise(function (resolve, reject) {  redis.get('key', function(){   resolve("Hello");   // reject();  }) })}promiseFun().then().catch();

2. Async await

var getAsync1 = await async1();async function async1() {return new Promise(function (resolve, reject) {  redis.get('key', function(){   resolve("Hello");   // reject();  }) });}console.log(getAsync1);

But …

如果是下面這樣寫

function promiseFun() { return new Promise(function (resolve, reject) {  redis.get('key', function(){   throw Error(); //依然捕獲不到  }) })}promiseFun().then().catch();

是依然捕獲不到的。

希望本文所述對(duì)大家nodejs程序設(shè)計(jì)有所幫助。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 辽宁省| 冕宁县| 潞西市| 宁阳县| 石渠县| 敦化市| 绥滨县| 花莲市| 冀州市| 丹东市| 哈尔滨市| 大冶市| 宿松县| 右玉县| 虹口区| 荣成市| 扎赉特旗| 定远县| 工布江达县| 吴旗县| 武威市| 东兰县| 三都| 桦南县| 海晏县| 平阳县| 台江县| 洞口县| 延边| 吴江市| 海林市| 乌兰察布市| 安陆市| 高要市| 贵州省| 东台市| 英德市| 安宁市| 玉溪市| 石首市| 保山市|