取得 PromiseRejectionEvent 的位置信息
P粉447785031
P粉447785031 2024-02-17 18:06:26
0
1
469

我有一些程式碼,其中async 函數可能會拋出錯誤,我正在使用unhandledrejection 事件處理它們,因為那些未捕獲的throw 不會觸發error 事件,因為它們發生在Promise 內。因此,我的錯誤處理程序正在取得 PromiseRejectionEvent 而不是 ErrorEvent

到目前為止,一切順利,錯誤處理工作正常。

但是我這裡有一個小問題,那就是PromiseRejectionEvent# 事件缺少位置信息,與ErrorEvent 事件不同,將位置放入引發錯誤的代碼中將非常有用.

當程式碼未使用async 函數,且處理程序取得ErrorEvent 事件時,需要使用event.filenameevent.linenoevent.colno,但PromiseRejectionEventphpcnend 中缺少這些cphpcn活動。

SO 我的問題是:我可以用任何方式包裝PromiseRejectionEvent 並重新分派它,以便最終我有一個帶有位置資訊的ErrorEvent嗎?

我嘗試過這樣的事情:

bigFunctionWithAllTheCodeIncludingAsyncFunctions()
.catch(error => {
    const errorEvent = new ErrorEvent('unhandledrejection', {
            'error': error,
    });
    window.dispatchEvent(errorEvent);
});

上面的程式碼產生了一個正確的ErrorEvent 以及相關的錯誤訊息但是所有位置資訊都是無用的(0 表示行和列, '' 表示檔名)。

順便說一句,我已經檢查了在 unhandledrejection 事件處理程序中獲取堆疊跟踪,但目前我無法使用自訂類別將 Promise 包裝在我的程式碼中。

提前非常感謝:)

P粉447785031
P粉447785031

全部回覆(1)
P粉835428659

是的!但不能透過自己建構和調度 ErrorEvent 來實現。相反,您可以使用 reportError

window.onunhandledrejection = event => {
  reportError(event.reason);
};

window.onerror = (...args) => {
  console.log('onerror', args);
};

(async function() { throw new Error("oops"); }());
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!