摘要:的錯誤監控插件監聽了事件,因此可以自動捕獲未處理錯誤。自從年雙十一正式上線,累計處理了億錯誤事件,付費客戶有金山軟件百姓網等眾多品牌企業。
譯者按: 通過監聽unhandledrejection事件,可以捕獲未處理的Promise錯誤。
原文: Tracking unhandled rejected Promises
譯者: Fundebug
為了保證可讀性,本文采用意譯而非直譯,并且對源代碼進行了大量修改。另外,本文版權歸原作者所有,翻譯僅用于學習。
使用Promise編寫異步代碼時,使用reject來處理錯誤。有時,開發者通常會忽略這一點,導致一些錯誤沒有得到處理。例如:
function main() { asyncFunc() .then(···) .then(() => console.log("Done!")); }
由于沒有使用catch方法捕獲錯誤,當asyncFunc()函數reject時,拋出的錯誤則沒有被處理。
這篇博客將分別介紹在瀏覽器與Node.js中,如何捕獲那些未處理的Promise錯誤。
瀏覽器中未處理的Promise錯誤一些瀏覽器(例如Chrome)能夠捕獲未處理的Promise錯誤。
unhandledrejection監聽unhandledrejection事件,即可捕獲到未處理的Promise錯誤:
window.addEventListener("unhandledrejection", event => ···);
這個事件是PromiseRejectionEvent實例,它有2個最重要的屬性:
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錯誤監控插件監聽了unhandledrejection事件,因此可以自動捕獲未處理Promise錯誤。
rejectionhandled當一個Promise錯誤最初未被處理,但是稍后又得到了處理,則會觸發rejectionhandled事件:
window.addEventListener("rejectionhandled", event => ···);
這個事件是PromiseRejectionEvent實例。
示例代碼:
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錯誤
監聽unhandledRejection事件,即可捕獲到未處理的Promise錯誤:
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+ 默認會報告未處理的Promise錯誤,因此不去監聽unhandledrejection事件也沒問題。
Fundebug的Node.js錯誤監控插件監聽了unhandledRejection事件,因此可以自動捕獲未處理Promise錯誤。
參考Promise Rejection Events Sample
Event: "unhandledRejection"
關于FundebugFundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java線上應用實時BUG監控。 自從2016年雙十一正式上線,Fundebug累計處理了10億+錯誤事件,付費客戶有Google、360、金山軟件、百姓網等眾多品牌企業。歡迎大家免費試用!
版權聲明轉載時請注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/10/09/unhandled-pomise-rejection/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89113.html
摘要:寫在前面這一章的順序對于未接觸過使用過的童鞋而言略抽象了,前邊幾章主要為了說明和之前的異步方式相比有什么優勢和它能解決什么問題,后邊才詳解的設計和各種場景下如何使用。建議先了解和簡單使用過后再閱讀,效果更佳。 寫在前面:Promise這一章的順序對于未接觸過使用過Promise的童鞋而言略抽象了,前邊幾章主要為了說明Promise和之前的異步方式相比有什么優勢和它能解決什么問題,后邊才...
摘要:三種狀態進行中已完成,又稱已失敗。如果的狀態是,那么的回調函數就會等待的狀態改變,在此之前不會有結果。等價于例子例子的概念是實例的別名,用于指定發生錯誤時的回調函數。 『ES6知識點總結』變量的解構賦值 本文主要內容如下:1 Promise是什么?1.1 特點:1.2 三種狀態:1.3 用處:1.4 Promise缺點:1.5 歷史過程2 生成promise實例3 pr...
摘要:我打算分成前端魔法堂異常不僅僅是和前端魔法堂調用棧,異常實例中的寶藏兩篇分別敘述內置自定義異常類,捕獲運行時異常語法異常網絡請求異常事件,什么是調用棧和如何獲取調用棧的相關信息。 前言 ?編程時我們往往拿到的是業務流程正確的業務說明文檔或規范,但實際開發中卻布滿荊棘和例外情況,而這些例外中包含業務用例的例外,也包含技術上的例外。對于業務用例的例外我們別無它法,必須要求實施人員與用戶共同...
摘要:第一個回調函數完成以后,會將返回結果作為參數,傳入第二個回調函數。采用鏈式的,可以指定一組按照次序調用的回調函數。這時,第二個方法指定的回調函數,就會等待這個新的對象狀態發生變化。方法是的別名,用于指定發生錯誤時的回調函數。 本文我是在學習阮一峰老師的ECMAScript 6 入門的Promise章節時,為了加深記憶,通篇都是照抄原文的。原文地址:阮一峰ECMAScipt入門 1.Pr...
閱讀 1214·2021-09-26 09:55
閱讀 3159·2019-08-30 15:55
閱讀 949·2019-08-30 15:53
閱讀 2286·2019-08-30 13:59
閱讀 2367·2019-08-29 13:08
閱讀 1098·2019-08-29 12:19
閱讀 3290·2019-08-26 13:41
閱讀 411·2019-08-26 13:24