promise ?中的錯(cuò)誤處理

最近太忙 好久沒有跟新了. 給自己留個(gè)坑,說一下js 中的錯(cuò)誤處理.

分為三塊吧.
第一:普通的js中 錯(cuò)誤處理.
第二: promise 中的錯(cuò)誤處理
第三: async 中的錯(cuò)誤處理

第一: 普通的js 的錯(cuò)誤處理?
?說普通是因?yàn)楸容^簡(jiǎn)單,算一個(gè)知識(shí)點(diǎn)沒有太多啥說的,大家找找資料比較齊全

https://www.sitepoint.com/exceptional-exception-handling-in-javascript/

try{

? ? ...? ? //異常的拋出}

catch(e){

? ? ...? ? //異常的捕獲與處理}

finally{

? ? ...? ? //結(jié)束處理}
第二: promise 中的錯(cuò)誤處理
在promise 中處理錯(cuò)誤,我們通常也是去try catch,但是 只能catch 到同步的錯(cuò)誤,如果是異步的,比如我們settimeout一下其實(shí)是catch不到的.來個(gè)栗子:

var promise = new Promise(function(resolve, reject){

? ? setTimeout(function(){

? ? ? ? throw new Error('test')

? ? }, 0)

? ? resolve('ok'); //輸出

});

promise

? ? .then(function(value){ console.log(value) })

? ? .catch(()=> console.log('err'))


栗子

可以看到,只輸出了ok,然后瀏覽器捕獲的錯(cuò)誤,catch并沒有拿到.

然后看看我們使用reject 來拋出錯(cuò)誤


reject

可以看到,reject 會(huì)不停的返回到下一個(gè),但是并不會(huì)被catch 到.如果我們?cè)囋噒hrow 一個(gè)error呢?

throw error

通過一層層throw 在catch 里面我們是可以拿到的,疑問來來, 如果是通過 異步promise 里面reject 能catch 到么?


異步

依然是可以拿到的.

好啦最后總結(jié)一下吧.在promise 中, 如果使用reject 錯(cuò)誤,必須要再每個(gè)then函數(shù)中throw 出去,不然在catch中無法拿到.其實(shí)我們不需要再次的throw ,在promise 正常catch 就好,比如在上面的異步中我們r(jià)eject一下在最后就能catch到. 需要注意的一點(diǎn)就是:promise 中的錯(cuò)誤是不會(huì)影響外層的運(yùn)行,window.onerror 也是無法檢測(cè)到的.


第三: async 中的錯(cuò)誤處理

async用起來確實(shí)方便很多,promise 導(dǎo)致整段代碼都是promise 的then ,如果判斷太多導(dǎo)致代碼邏輯復(fù)雜難以維護(hù),而且每個(gè)then 都有自己的作用域,如果要貢獻(xiàn)數(shù)據(jù) 通常要在外層新建一個(gè).

直接貼代碼吧,看看async 正常處理異步的方式

const f = () => {

? return new Promise((resolve, reject) => {

? ? setTimeout(() => {

? ? ? reject(234);

? ? }, 2000);

? });

};

const testAsync = () => {

? try {

? ? const t = await f();

? ? console.log(t);

? } catch (err) {

? ? console.log(err);

? }

};

testAsync();

可以看到,可以使用同步的方式來處理error,但是如果判斷很多,多個(gè)異步又會(huì)導(dǎo)致到處都是判斷和try catch.因此國(guó)外的大神Dima Grossman給出了一個(gè)解決方案.直接貼官方的傳送門!

https://github.com/scopsy/await-to-js

?下面這個(gè)鏈接是一位大佬對(duì)await to js 使用中的改進(jìn).很值得一看,對(duì)優(yōu)化自己的代碼和流程很又幫助.
https://segmentfault.com/a/1190000011802045
好咯,又要去搬磚了..

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末得院,一起剝皮案震驚了整個(gè)濱河市吝羞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哎甲,老刑警劉巖唯沮,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掖疮,死亡現(xiàn)場(chǎng)離奇詭異涛漂,居然都是意外死亡奄抽,警方通過查閱死者的電腦和手機(jī)看蚜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門叫搁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人供炎,你說我怎么就攤上這事渴逻。” “怎么了音诫?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵惨奕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我竭钝,道長(zhǎng)梨撞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任香罐,我火速辦了婚禮卧波,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庇茫。我一直安慰自己港粱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布旦签。 她就那樣靜靜地躺著查坪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宁炫。 梳的紋絲不亂的頭發(fā)上偿曙,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音羔巢,去河邊找鬼望忆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛竿秆,可吹牛的內(nèi)容都是我干的炭臭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼袍辞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了常摧?” 一聲冷哼從身側(cè)響起搅吁,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤威创,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后谎懦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肚豺,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年界拦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吸申。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡享甸,死狀恐怖截碴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蛉威,我是刑警寧澤日丹,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站蚯嫌,受9級(jí)特大地震影響哲虾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜择示,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一束凑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栅盲,春花似錦汪诉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至孝常,卻和暖如春旗们,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背构灸。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工上渴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喜颁。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓稠氮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親半开。 傳聞我的和親對(duì)象是個(gè)殘疾皇子隔披,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • title: promise總結(jié) 總結(jié)在前 前言 下文類似 Promise#then、Promise#resolv...
    JyLie閱讀 12,221評(píng)論 1 21
  • Promise 對(duì)象 Promise 的含義 Promise 是異步編程的一種解決方案寂拆,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,698評(píng)論 1 56
  • 本文適用的讀者 本文寫給有一定Promise使用經(jīng)驗(yàn)的人奢米,如果你還沒有使用過Promise抓韩,這篇文章可能不適合你,...
    HZ充電大喵閱讀 7,296評(píng)論 6 19
  • 一鬓长、Promise的含義 Promise在JavaScript語(yǔ)言中早有實(shí)現(xiàn)谒拴,ES6將其寫進(jìn)了語(yǔ)言標(biāo)準(zhǔn),統(tǒng)一了用法...
    Alex灌湯貓閱讀 818評(píng)論 0 2
  • 這學(xué)期我們備課組在各方面都取得了顯著的進(jìn)步涉波。 首先英上,大家更能齊心協(xié)力了。以往在各項(xiàng)工作中有推諉現(xiàn)象啤覆,現(xiàn)在大家都能努...
    樾媽隨筆閱讀 737評(píng)論 0 0