成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

捕獲未處理的Promise錯(cuò)誤

HackerShell / 3136人閱讀

摘要:的錯(cuò)誤監(jiān)控插件監(jiān)聽(tīng)了事件,因此可以自動(dòng)捕獲未處理錯(cuò)誤。自從年雙十一正式上線,累計(jì)處理了億錯(cuò)誤事件,付費(fèi)客戶有金山軟件百姓網(wǎng)等眾多品牌企業(yè)。

譯者按: 通過(guò)監(jiān)聽(tīng)unhandledrejection事件,可以捕獲未處理的Promise錯(cuò)誤。

原文: Tracking unhandled rejected Promises

譯者: Fundebug

為了保證可讀性,本文采用意譯而非直譯,并且對(duì)源代碼進(jìn)行了大量修改。另外,本文版權(quán)歸原作者所有,翻譯僅用于學(xué)習(xí)。

使用Promise編寫(xiě)異步代碼時(shí),使用reject來(lái)處理錯(cuò)誤。有時(shí),開(kāi)發(fā)者通常會(huì)忽略這一點(diǎn),導(dǎo)致一些錯(cuò)誤沒(méi)有得到處理。例如:

function main() {
    asyncFunc()
    .then(···)
    .then(() => console.log("Done!"));
}

由于沒(méi)有使用catch方法捕獲錯(cuò)誤,當(dāng)asyncFunc()函數(shù)reject時(shí),拋出的錯(cuò)誤則沒(méi)有被處理。

這篇博客將分別介紹在瀏覽器與Node.js中,如何捕獲那些未處理的Promise錯(cuò)誤。

瀏覽器中未處理的Promise錯(cuò)誤

一些瀏覽器(例如Chrome)能夠捕獲未處理的Promise錯(cuò)誤。

unhandledrejection

監(jiān)聽(tīng)unhandledrejection事件,即可捕獲到未處理的Promise錯(cuò)誤:

window.addEventListener("unhandledrejection", event => ···);

這個(gè)事件是PromiseRejectionEvent實(shí)例,它有2個(gè)最重要的屬性:

promise: reject的Promise

reason: Promise的reject值

示例代碼:

window.addEventListener("unhandledrejection", event =>
{
    console.log(event.reason); // 打印"Hello, Fundebug!"
});

function foo()
{
    Promise.reject("Hello, Fundebug!");
}

foo();

Fundebug的JavaScript錯(cuò)誤監(jiān)控插件監(jiān)聽(tīng)了unhandledrejection事件,因此可以自動(dòng)捕獲未處理Promise錯(cuò)誤。

rejectionhandled

當(dāng)一個(gè)Promise錯(cuò)誤最初未被處理,但是稍后又得到了處理,則會(huì)觸發(fā)rejectionhandled事件:

window.addEventListener("rejectionhandled", event => ···);

這個(gè)事件是PromiseRejectionEvent實(shí)例。

示例代碼:

window.addEventListener("unhandledrejection", event =>
{
    console.log(event.reason); // 打印"Hello, Fundebug!"
});

window.addEventListener("rejectionhandled", event =>
{
    console.log("rejection handled"); // 1秒后打印"rejection handled"
});


function foo()
{
    return Promise.reject("Hello, Fundebug!");
}

var r = foo();

setTimeout(() =>
{
    r.catch(e =>{});
}, 1000);
Node.js中未處理的Promise錯(cuò)誤

監(jiān)聽(tīng)unhandledRejection事件,即可捕獲到未處理的Promise錯(cuò)誤:

process.on("unhandledRejection", (reason, promise) => ···);

示例代碼:

process.on("unhandledRejection", reason =>
{
    console.log(reason); // 打印"Hello, Fundebug!"
});

function foo()
{
    Promise.reject("Hello, Fundebug!");
}

foo();

注: Node.js v6.6.0+ 默認(rèn)會(huì)報(bào)告未處理的Promise錯(cuò)誤,因此不去監(jiān)聽(tīng)unhandledrejection事件也沒(méi)問(wèn)題。

Fundebug的Node.js錯(cuò)誤監(jiān)控插件監(jiān)聽(tīng)了unhandledRejection事件,因此可以自動(dòng)捕獲未處理Promise錯(cuò)誤。

參考

Promise Rejection Events Sample

Event: "unhandledRejection"

關(guān)于Fundebug

Fundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java線上應(yīng)用實(shí)時(shí)BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計(jì)處理了10億+錯(cuò)誤事件,付費(fèi)客戶有Google、360、金山軟件、百姓網(wǎng)等眾多品牌企業(yè)。歡迎大家免費(fèi)試用!

版權(quán)聲明

轉(zhuǎn)載時(shí)請(qǐng)注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/10/09/unhandled-pomise-rejection/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89113.html

相關(guān)文章

  • 【筆記】你不知道JS讀書(shū)筆記——Promise

    摘要:寫(xiě)在前面這一章的順序?qū)τ谖唇佑|過(guò)使用過(guò)的童鞋而言略抽象了,前邊幾章主要為了說(shuō)明和之前的異步方式相比有什么優(yōu)勢(shì)和它能解決什么問(wèn)題,后邊才詳解的設(shè)計(jì)和各種場(chǎng)景下如何使用。建議先了解和簡(jiǎn)單使用過(guò)后再閱讀,效果更佳。 寫(xiě)在前面:Promise這一章的順序?qū)τ谖唇佑|過(guò)使用過(guò)Promise的童鞋而言略抽象了,前邊幾章主要為了說(shuō)明Promise和之前的異步方式相比有什么優(yōu)勢(shì)和它能解決什么問(wèn)題,后邊才...

    mumumu 評(píng)論0 收藏0
  • 【ES6腳丫系列】Promise

    摘要:三種狀態(tài)進(jìn)行中已完成,又稱已失敗。如果的狀態(tài)是,那么的回調(diào)函數(shù)就會(huì)等待的狀態(tài)改變,在此之前不會(huì)有結(jié)果。等價(jià)于例子例子的概念是實(shí)例的別名,用于指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)。 『ES6知識(shí)點(diǎn)總結(jié)』變量的解構(gòu)賦值 本文主要內(nèi)容如下:1 Promise是什么?1.1 特點(diǎn):1.2 三種狀態(tài):1.3 用處:1.4 Promise缺點(diǎn):1.5 歷史過(guò)程2 生成promise實(shí)例3 pr...

    BoYang 評(píng)論0 收藏0
  • 前端魔法堂——異常不僅僅是try/catch

    摘要:我打算分成前端魔法堂異常不僅僅是和前端魔法堂調(diào)用棧,異常實(shí)例中的寶藏兩篇分別敘述內(nèi)置自定義異常類,捕獲運(yùn)行時(shí)異常語(yǔ)法異常網(wǎng)絡(luò)請(qǐng)求異常事件,什么是調(diào)用棧和如何獲取調(diào)用棧的相關(guān)信息。 前言 ?編程時(shí)我們往往拿到的是業(yè)務(wù)流程正確的業(yè)務(wù)說(shuō)明文檔或規(guī)范,但實(shí)際開(kāi)發(fā)中卻布滿荊棘和例外情況,而這些例外中包含業(yè)務(wù)用例的例外,也包含技術(shù)上的例外。對(duì)于業(yè)務(wù)用例的例外我們別無(wú)它法,必須要求實(shí)施人員與用戶共同...

    bladefury 評(píng)論0 收藏0
  • promise學(xué)習(xí)筆記

    摘要:第一個(gè)回調(diào)函數(shù)完成以后,會(huì)將返回結(jié)果作為參數(shù),傳入第二個(gè)回調(diào)函數(shù)。采用鏈?zhǔn)降?,可以指定一組按照次序調(diào)用的回調(diào)函數(shù)。這時(shí),第二個(gè)方法指定的回調(diào)函數(shù),就會(huì)等待這個(gè)新的對(duì)象狀態(tài)發(fā)生變化。方法是的別名,用于指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)。 本文我是在學(xué)習(xí)阮一峰老師的ECMAScript 6 入門(mén)的Promise章節(jié)時(shí),為了加深記憶,通篇都是照抄原文的。原文地址:阮一峰ECMAScipt入門(mén) 1.Pr...

    mykurisu 評(píng)論0 收藏0
  • promise

    摘要:是一個(gè)對(duì)象,它的內(nèi)部其實(shí)有三種狀態(tài)。已拒絕的異步操作未成功結(jié)束。方法則是將對(duì)象的狀態(tài)改變?yōu)槭?,同時(shí)將錯(cuò)誤的信息傳遞到后續(xù)錯(cuò)誤處理的操作。在第二個(gè)中拿到數(shù)據(jù)并且捕獲。使用的寫(xiě)法比一般的寫(xiě)法更加清晰明確。 ## 前言 今天來(lái)分享下promise的用法,es6偉大發(fā)明之一,當(dāng)初我學(xué)習(xí)的時(shí)候也是蠻頭大的,不知道為啥,整個(gè)腦子就是,我在哪,我要干啥的懵圈,后面認(rèn)真學(xué)習(xí)之后,覺(jué)得真是十分好用,下...

    jay_tian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

HackerShell

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<