Obtenir les informations de localisation de PromiseRejectionEvent
P粉447785031
P粉447785031 2024-02-17 18:06:26
0
1
431

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.filenameevent.linenoevent.colno mais que ces activités cphpcn sont absentes de PromiseRejectionEventphpcnend.

SO Ma question est la suivante : puis-je envelopper un PromiseRejectionEvent 并重新分派它,以便最终我有一个带有位置信息的 ErrorEventPromiseRejectionEvent de quelque manière que ce soit et le réexpédier afin d'avoir éventuellement un

ErrorEvent avec des informations de localisation ?

J'ai essayé quelque chose comme ceci :

bigFunctionWithAllTheCodeIncludingAsyncFunctions()
.catch(error => {
    const errorEvent = new ErrorEvent('unhandledrejection', {
            'error': error,
    });
    window.dispatchEvent(errorEvent);
});
ErrorEvent 以及相关的错误信息但是所有位置信息都是无用的(0Le 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粉447785031
P粉447785031

répondre à tous(1)
P粉835428659

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"); }());
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!