Rumah  >  Soal Jawab  >  teks badan

Dapatkan maklumat lokasi PromiseRejectionEvent

Saya mempunyai beberapa kod di mana async 函数可能会抛出错误,我正在使用 unhandledrejection 事件处理它们,因为那些未捕获的 throw 不会触发 error 事件,因为它们发生在 Promise 内。因此,我的错误处理程序正在获取 PromiseRejectionEvent 而不是 ErrorEvent.

Setakat ini, pengendalian ralat berfungsi dengan baik.

Tetapi Saya mempunyai masalah kecil di sini dan itu ialah acara PromiseRejectionEvent 事件缺少位置信息,与 ErrorEvent berbeza dan sangat berguna untuk meletakkan lokasi ke dalam kod yang membuang ralat.

Apabila kod tidak menggunakan async 函数,并且处理程序获取 ErrorEvent 事件时,需要使用 event.filenameevent.linenoevent.colno tetapi aktiviti cphpcn ini tiada daripada PromiseRejectionEventphpcnend.

SO Soalan saya ialah: Bolehkah saya membalut PromiseRejectionEvent 并重新分派它,以便最终我有一个带有位置信息的 ErrorEventPromiseRejectionEvent dalam apa jua cara dan menghantarnya semula supaya akhirnya saya mempunyai

ErrorEvent dengan maklumat lokasi?

Saya mencuba sesuatu seperti ini:

bigFunctionWithAllTheCodeIncludingAsyncFunctions()
.catch(error => {
    const errorEvent = new ErrorEvent('unhandledrejection', {
            'error': error,
    });
    window.dispatchEvent(errorEvent);
});
ErrorEvent 以及相关的错误信息但是所有位置信息都是无用的(0Kod di atas menjana

ErrorEvent yang betul dan mesej ralat yang berkaitan

tetapi

semua maklumat lokasi tidak berguna (

0 mewakili baris dan lajur, '' mewakili nama fail).

🎜BTW, saya telah menyemak untuk mendapatkan surih tindanan dalam pengendali acara unhandledrejection, tetapi pada masa ini saya tidak dapat membungkus Promise dalam kod saya menggunakan kelas tersuai. 🎜 🎜Terima kasih banyak-banyak terlebih dahulu :)🎜
P粉447785031P粉447785031245 hari yang lalu442

membalas semua(1)saya akan balas

  • P粉835428659

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

    Ya! Tetapi bukan dengan membina dan menjadualkannya sendiri ErrorEvent 来实现。相反,您可以使用 reportError:

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

    balas
    0
  • Batalbalas