Maison > Questions et réponses > le corps du texte
J'ai un code où async
函数可能会抛出错误,我正在使用 unhandledrejection
事件处理它们,因为那些未捕获的 throw
不会触发 error
事件,因为它们发生在 Promise
内。因此,我的错误处理程序正在获取 PromiseRejectionEvent
而不是 ErrorEvent
.
Jusqu’ici tout va bien, la gestion des erreurs fonctionne bien.
Mais J'ai un petit problème ici et c'est que l'événement PromiseRejectionEvent
事件缺少位置信息,与 ErrorEvent
est différent et il serait très utile de mettre l'emplacement dans le code qui renvoie l'erreur.
Lorsque le code n'utilise pas async
函数,并且处理程序获取 ErrorEvent
事件时,需要使用 event.filename
、event.lineno
和 event.colno
mais que ces activités cphpcn sont absentes de PromiseRejectionEventphpcnend.
SO Ma question est la suivante : puis-je envelopper un PromiseRejectionEvent
并重新分派它,以便最终我有一个带有位置信息的 ErrorEvent
PromiseRejectionEvent de quelque manière que ce soit et le réexpédier afin d'avoir éventuellement un
J'ai essayé quelque chose comme ceci :
bigFunctionWithAllTheCodeIncludingAsyncFunctions() .catch(error => { const errorEvent = new ErrorEvent('unhandledrejection', { 'error': error, }); window.dispatchEvent(errorEvent); });
ErrorEvent
以及相关的错误信息但是所有位置信息都是无用的(0
Le code ci-dessus génère un ErrorEvent correct et un message d'erreur associé mais
toutes les informations de localisation sont inutiles (0 représente la ligne et la colonne, '' représente le nom du fichier).
🎜BTW, j'ai vérifié pour obtenir la trace de la pile dans le gestionnaire d'événements unhandledrejection, mais actuellement je ne peux pas envelopper la promesse dans mon code à l'aide d'une classe personnalisée. 🎜 🎜Merci beaucoup d'avance :)🎜P粉8354286592024-02-18 10:48:20
Oui ! Mais pas en le construisant et en le planifiant vous-même ErrorEvent
来实现。相反,您可以使用 reportError
:
window.onunhandledrejection = event => { reportError(event.reason); }; window.onerror = (...args) => { console.log('onerror', args); }; (async function() { throw new Error("oops"); }());