我有一些程式碼,其中async
函數可能會拋出錯誤,我正在使用unhandledrejection
事件處理它們,因為那些未捕獲的throw
不會觸發error
事件,因為它們發生在Promise
內。因此,我的錯誤處理程序正在取得 PromiseRejectionEvent
而不是 ErrorEvent
。
到目前為止,一切順利,錯誤處理工作正常。
但是我這裡有一個小問題,那就是PromiseRejectionEvent
# 事件缺少位置信息,與ErrorEvent
事件不同,將位置放入引發錯誤的代碼中將非常有用.
當程式碼未使用async
函數,且處理程序取得ErrorEvent
事件時,需要使用event.filename
、event.lineno
和event.colno
,但PromiseRejectionEventphpcnend 中缺少這些cphpcn活動。
SO 我的問題是:我可以用任何方式包裝PromiseRejectionEvent
並重新分派它,以便最終我有一個帶有位置資訊的ErrorEvent
嗎?
我嘗試過這樣的事情:
bigFunctionWithAllTheCodeIncludingAsyncFunctions() .catch(error => { const errorEvent = new ErrorEvent('unhandledrejection', { 'error': error, }); window.dispatchEvent(errorEvent); });
上面的程式碼產生了一個正確的ErrorEvent
以及相關的錯誤訊息但是所有位置資訊都是無用的(0
表示行和列, '' 表示檔名)。
順便說一句,我已經檢查了在 unhandledrejection 事件處理程序中獲取堆疊跟踪,但目前我無法使用自訂類別將 Promise 包裝在我的程式碼中。
提前非常感謝:)
是的!但不能透過自己建構和調度
ErrorEvent
來實現。相反,您可以使用reportError
: