获取 PromiseRejectionEvent 的位置信息
P粉447785031
P粉447785031 2024-02-17 18:06:26
[JavaScript讨论组]

我有一些代码,其中 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粉447785031
P粉447785031

全部回复(1)
P粉835428659

是的!但不能通过自己构建和调度 ErrorEvent 来实现。相反,您可以使用 reportError

window.onunhandledrejection = event => {
  reportError(event.reason);
};

window.onerror = (...args) => {
  console.log('onerror', args);
};

(async function() { throw new Error("oops"); }());
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号