@sentry/browser
@sentry/node
raven-js
raven-node
_(节点的乌鸦)_5.10.2
我的项目经常会遇到类似Event Non-Error promise reject之类的错误,用keys: currentTarget, isTrusted, target, type 捕获,没有任何有用的信息。 一个额外的数据是
__serialized__ = {
currentTarget: [object Null],
isTrusted: [Circular ~],
target: head > script[type="text/javascript"],
type: error
}
看起来像一个事件实例。 信息有限,不知道哪里触发了这个bug,有没有人遇到过同样的问题?
在过去的几周里,我们也开始看到这些。 我刚刚开始研究它,所以我没有更多关于导致它的原因的详细信息。
同样在这里,现在在 Sentry v5.15.5 上。
有人可以提供指向 Sentry 中捕获的此类事件的任何链接吗? 看起来像是脚本加载错误(注意target
已触发此事件)
@kamilogorek能把你公司的邮箱发给我吗? 我可以分享事件的例子。
@Santas [email protected]
如果您需要更多示例,我也可以发送一些@kamilogorek - 请告诉我。
@sheelah是的,请
@sheelah说实话,我们在这里没有太多可以改进的地方。 JS 没有给我们更多我们已经提供的信息。 每当 promise 对象的实例被拒绝时,它就会触发onunhandledrejection
事件(OP 描述中的onerror
也是如此)。
https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event
然而,没有什么可以阻止任何人在那里传递任何随机的东西。
因此像Promise.reject("whatever")
或Promise.reject(jQueryBecauseWhyNot)
代码是完全有效的 JS 代码。
每当我们遇到一些不是原始值的东西,一个包含堆栈跟踪的对象(例如Error
)或内部 DOM 异常时,我们必须回退到简单的对象序列化并尝试提取我们可以得到的任何信息其中。 您可以看到eventbuilder.ts
文件以获取传递给事件处理程序的“任何随机值”可以采用的可能路径列表 – https://github.com/getsentry/sentry-javascript/blob/master/packages/浏览器/src/eventbuilder.ts#L17 -L80
不幸的是,我不确定我们是否可以让它更通用来处理更多类型的输入。
如果有人对这个过程有任何反馈,我完全愿意接受建议。
(在此处回答而不是您的电子邮件,以保持对话对其他人公开)
根据我的观察:
ZXing
和browser-image-compression
,但没有第三方跟踪脚本;ProgressEvent
,而不仅仅是一个事件——它似乎是 HTTP 请求库的一部分(我使用的是 axios)。ADDITIONAL DATA
__serialized__ | {
currentTarget: [object Null],
isTrusted: [Circular ~],
target: [object FileReader],
type: error}
-- | --
我也刚刚收到一份报告,其中包含“用值捕获的非错误承诺拒绝:空”。 与上面提到的@anton-bot 类似,受影响的用户在 Mac OS X 10.15.6 上使用 Safari 13.1.2。
我查看了我编译的应用程序代码的reject(
调用,其中可能提供了null
对象,但找不到任何对象,所以我想知道它可能是浏览器扩展还是第三个派对脚本。 由于没有堆栈跟踪或面包屑,很难知道到底发生了什么。
过去两周也一直在看到这一点。 在我们的网站上,我们只在使用 google maps javascript API 的页面上看到它,所以我觉得它可能与此有关。 还有其他人在使用谷歌地图的 URL 上看到过这个吗?
编辑:到目前为止,我们已经在 iOS 和 Android 上看到了这个问题
编辑:附加数据:
{
currentTarget: [object Null],
isTrusted: [Circular ~],
target: head > script[type="text/javascript"],
type: error
}
@asbjornh不,我的页面中没有 Google 地图
@kamilogorek OP 的附加数据(和我的)是否是由这样的Promise.reject(new Event("error"))
? 或者这种情况下的 Sentry 事件是否总是具有看起来像浏览器事件的有效载荷?
我也收到同样的错误
这个错误刚刚耗尽了我的配额容量。
在过去的 24 小时内,我们有 289 个此类事件 - 我们的页面甚至还没有上线..
{
currentTarget: [object Null],
isTrusted: [Circular ~],
target: head > link,
type: error
}
我们正在使用 next.js
在这里和 cra 一样😅
似乎这个问题是由大致这样的事情引起的:
new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = src;
script.onload = resolve;
script.onerror = reject;
document.body.appendChild(script);
});
onerror
钩子实际上会收到一个Event
对象,而不是Error
实例,这会导致上面提到的这些问题。 这可以通过按照https://developer.mozilla.org/de/docs/Web/API/HTMLScriptElement 的建议用Error
包装Event
来避免:
new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = src;
script.onload = resolve;
script.onerror = event => {
reject(new Error(`Failed to load ${event.target.src}`));
};
document.body.appendChild(script);
});
就我而言,是 Next.js 的9.5.2
预取机制导致它在 Firefox 上出现,以防万一有人有类似的情况。 (也许在这里?https://github.com/getsentry/sentry-javascript/issues/2546#issuecomment-697771381)这是问题: https : 9.5.3
或 Canary 来解决。
但是,浏览器中的错误要详细得多:
Uncaught (in promise)
error
bubbles: false
...
...
as: "fetch"
assignedSlot: null
attributes: NamedNodeMap(3
0: href="/_next/data/wmQYPCwvbuBulJfEwTMRf/smartwatches/fitbit-ionic.json"
1: rel="prefetch"
2: as="fetch"
as: as="fetch"
href: href="/_next/data/wmQYPCwvbuBulJfEwTMRf/smartwatches/fitbit-ionic.json"
length: 3
rel: rel="prefetch"
...
...
isTrusted: true
originalTarget: <link href="/_next/data/wmQYPCwvbuBu…tches/fitbit-ionic.json" rel="prefetch" as="fetch">
returnValue: true
srcElement: <link href="/_next/data/wmQYPCwvbuBu…tches/fitbit-ionic.json" rel="prefetch" as="fetch">
target: <link href="/_next/data/wmQYPCwvbuBu…tches/fitbit-ionic.json" rel="prefetch" as="fetch">
timeStmp: 25366
type: "error"
...
我们如何让 Sentry 捕获这些数据?
@Turbo87是的! 这正是我们只在使用@googlemaps/js-api-loader
页面上看到它的原因。 他们正在做你在这里描述的
谢谢!!
最有用的评论
这个错误刚刚耗尽了我的配额容量。