首頁  >  問答  >  主體

取得 PromiseRejectionEvent 的位置信息

我有一些程式碼,其中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粉447785031P粉447785031245 天前444

全部回覆(1)我來回復

  • P粉835428659

    P粉8354286592024-02-18 10:48:20

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

    window.onunhandledrejection = event => {
      reportError(event.reason);
    };
    
    window.onerror = (...args) => {
      console.log('onerror', args);
    };
    
    (async function() { throw new Error("oops"); }());

    回覆
    0
  • 取消回覆