Maison  >  Questions et réponses  >  le corps du texte

Obtenir les informations de localisation de PromiseRejectionEvent

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粉447785031P粉447785031245 Il y a quelques jours441

répondre à tous(1)je répondrai

  • P粉835428659

    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"); }());

    répondre
    0
  • Annulerrépondre