Sentry-javascript: イベント:キーでキャプチャされたエラー以外の約束の拒否:currentTarget、isTrusted、target、type

作成日 2020年04月20日  ·  21コメント  ·  ソース: getsentry/sentry-javascript

パッケージ+バージョン

  • [x] @sentry/browser
  • [] @sentry/node
  • [] raven-js
  • [] raven-node _(ノードのレイヴン)_
  • [ ] 他の:

バージョン:

5.10.2

説明

私のプロジェクトでは、多くの場合、キー(currentTarget、isTrusted、target、type、有用な情報なし)でキャプチャされたイベント非エラープロミス拒否などのエラーが発生します。 そして、追加のデータは

__serialized__ = {
    currentTarget: [object Null], 
    isTrusted: [Circular ~], 
    target: head > script[type="text/javascript"], 
    type: error
}

イベントインスタンスのように見えます。 限られた情報で、このバグがどこで引き起こされるのかわかりませんが、誰かが同じ問題に遭遇したことがありますか?

Needs Information

最も参考になるコメント

このエラーにより、クォータ容量が使い果たされました。

全てのコメント21件

また、ここ数週間でこれらを見始めました。 私はそれを調べ始めたばかりなので、それを引き起こしている原因についてこれ以上の詳細はありません。

ここでも同じですが、Sentryv5.15.5になりました。

誰かがセントリーでキャプチャされたこのタイプのイベントへのリンクを提供できますか? スクリプトの読み込みエラーのようです(このイベントがトリガーされたtarget注意してください)

@kamilogorek会社のメールアドレスを送って

さらに例が必要な場合は、 @ 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ファイルをください

残念ながら、より多くの種類の入力を処理するために、これ以上一般的なものにすることができるかどうかはわかりません。
誰かがそのプロセスに関してフィードバックを持っているなら、私は提案を完全に受け入れます。

(他のすべての人に会話を公開するために、電子メールの代わりにここで回答しました)

私の観察から:

  • モバイルまたはデスクトップ上のSafariの最近のさまざまなバージョンでのみ発生します。
  • ZXingbrowser-image-compressionなど、いくつかのライブラリをWebアプリにインストールしていますが、サードパーティの追跡スクリプトはありません。
  • API呼び出しがネットワークエラー(コード0)で失敗するのとまったく同時に発生するようです。
  • 私の場合、それは単なるイベントではなく、より具体的にはProgressEvent -これはHTTPリクエストライブラリの一部のようです(私はaxiosを使用しています)。
ADDITIONAL DATA

__serialized__ | {
    currentTarget: [object Null],
    isTrusted: [Circular ~],
    target: [object FileReader],
    type: error}
-- | --

また、「値:nullでキャプチャされたエラーなしのpromise拒否」というレポートを受け取りました。 上記の@ anton-botと同様に、影響を受けるユーザーはMac OS X10.15.6でSafari13.1.2を使用していました。

コンパイルされたアプリコードでreject(呼び出しを調べましたが、おそらくnullオブジェクトが提供されていますが、何も見つかりませんでした。そのため、ブラウザー拡張機能なのか、それとも3番目のオブジェクトなのか疑問に思いました。パーティースクリプト。 スタックトレースやブレッドクラムがないため、正確に何が起こったのかを知ることは非常に困難です。

過去2週間もこれを見てきました。 私たちのサイトでは、グーグルマップの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イベントには、常にブラウザーイベントのように見えるペイロードがありますか?

@asbjornhはい、このフローを通過します-https

私も同じエラーが発生します

このエラーにより、クォータ容量が使い果たされました。

過去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フックは、実際にはErrorインスタンスではなく、 Eventオブジェクトを受け取ります。これにより、上記の問題が発生します。 これは、 httpsEventErrorラップすることで回避できます

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

私の場合、誰かが同様のケースを抱えている場合に備えて、Firefoxでそれを引き起こしたのはNext.jsの9.5.2プリフェッチメカニズムhttps9.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を使用しているページでのみ表示される理由です。 彼らはあなたがここで説明します

ありがとう!!

このページは役に立ちましたか?
0 / 5 - 0 評価