Sentry-javascript: Acara: Penolakan janji Non-Error ditangkap dengan kunci: Target saat ini, dipercaya, target, ketik

Dibuat pada 20 Apr 2020  ·  21Komentar  ·  Sumber: getsentry/sentry-javascript

Paket + Versi

  • [x] @sentry/browser
  • [ ] @sentry/node
  • [ ] raven-js
  • [ ] raven-node _(gagak untuk simpul)_
  • [ ] lainnya:

Versi: kapan:

5.10.2

Keterangan

Proyek saya sering mendapatkan kesalahan seperti penolakan janji Event Non-Error yang ditangkap dengan kunci: currentTarget, isTrusted, target, type,tanpa informasi yang berguna. Dan data tambahannya adalah

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

terlihat seperti contoh Acara. Dengan informasi yang terbatas,Saya tidak tahu di mana bug ini dipicu,apakah ada yang mengalami masalah yang sama?

Needs Information

Komentar yang paling membantu

Kesalahan ini baru saja menghabiskan kapasitas kuota saya.

Semua 21 komentar

Kami juga mulai melihat ini dalam beberapa minggu terakhir. Saya baru saja mulai menyelidikinya jadi saya tidak memiliki detail lebih lanjut tentang apa yang menyebabkannya.

Sama di sini, sekarang di Sentry v5.15.5.

Adakah yang bisa memberikan tautan ke jenis acara yang ditangkap di Sentry ini? Sepertinya kesalahan pemuatan skrip (perhatikan target yang memicu peristiwa ini)

@kamilogorek dapatkah Anda mengirimkan saya email perusahaan Anda? Saya dapat berbagi contoh peristiwa.

Jika Anda membutuhkan lebih banyak contoh, saya dapat mengirim beberapa juga @kamilogorek -- beri tahu saya.

@sheelah ya, tolong

@sheelah tidak banyak yang bisa kami perbaiki di sini, jujur. JS tidak memberi kami lebih banyak informasi yang sudah kami berikan. Setiap kali instance dari objek janji ditolak, itu memicu acara onunhandledrejection (hal yang sama berlaku untuk onerror dalam deskripsi OP).

https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event

Namun, tidak ada yang akan menghentikan siapa pun untuk melewatkan barang acak apa pun di sana.
Jadi kode seperti ini Promise.reject("whatever") atau Promise.reject(jQueryBecauseWhyNot) adalah kode JS yang benar-benar valid.

Setiap kali kami menemukan sesuatu yang bukan nilai primitif, objek yang berisi jejak tumpukan (mis. Error ) atau pengecualian DOM internal, kami harus kembali ke serialisasi objek sederhana dan mencoba mengekstrak informasi apa pun yang kami dapat keluarkan itu. Anda dapat melihat file eventbuilder.ts untuk daftar kemungkinan jalur yang dapat diambil oleh "nilai acak apa pun" yang dapat diambil oleh event handler – https://github.com/getsentry/sentry-javascript/blob/master/packages/ browser/src/eventbuilder.ts#L17 -L80

Sayangnya, saya tidak yakin apakah kita bisa membuatnya lebih umum untuk menangani lebih banyak jenis input.
Jika ada yang memiliki umpan balik mengenai proses itu, saya sangat terbuka untuk saran.

(dijawab di sini alih-alih ke email Anda, agar percakapan tetap publik untuk semua orang)

Dari pengamatan saya:

  • Hanya terjadi di berbagai versi Safari terbaru di seluler atau desktop;
  • Saya memiliki beberapa pustaka yang terpasang di aplikasi web saya seperti ZXing dan browser-image-compression , tetapi tidak ada skrip pelacakan pihak ketiga;
  • Tampaknya terjadi bersamaan dengan panggilan API gagal dengan Kesalahan Jaringan (kode 0).
  • Dalam kasus saya, ini lebih khusus ProgressEvent , bukan hanya acara - yang tampaknya menjadi bagian dari perpustakaan permintaan HTTP (saya menggunakan aksioma).
ADDITIONAL DATA

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

Saya juga baru saja menerima laporan dengan "Non-Error janji penolakan ditangkap dengan nilai: null". Mirip dengan apa yang @anton-bot sebutkan di atas, pengguna yang terpengaruh menggunakan Safari 13.1.2 di Mac OS X 10.15.6.

Saya telah melihat kode aplikasi terkompilasi saya untuk panggilan reject( mana kemungkinan objek null disediakan, tetapi tidak dapat menemukannya, jadi saya bertanya-tanya apakah itu mungkin ekstensi browser atau ke-3 naskah pesta. Karena tidak ada jejak tumpukan atau remah roti, cukup sulit untuk mengetahui apa yang sebenarnya terjadi.

Juga telah melihat ini selama dua minggu terakhir. Di situs kami, kami hanya melihatnya di halaman yang menggunakan API javascript google maps jadi saya merasa itu mungkin terkait dengan itu. Adakah orang lain yang melihat ini di URL yang menggunakan peta google?

Sunting: Sejauh ini kami telah melihat masalah di iOS dan Android

Sunting: Data tambahan:

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

@asbjornh tidak, saya tidak memiliki Google Maps di halaman saya

@kamilogorek Apakah data tambahan OP (dan milik saya) disebabkan oleh sesuatu seperti ini Promise.reject(new Event("error")) ? Atau akankah acara Sentry untuk situasi ini selalu memiliki muatan yang terlihat seperti acara browser?

Saya juga mendapatkan kesalahan yang sama

Kesalahan ini baru saja menghabiskan kapasitas kuota saya.

kami memiliki 289 acara ini dalam 24 jam terakhir - dan halaman kami bahkan belum ditayangkan ..

{
currentTarget: [object Null], 
isTrusted: [Circular ~], 
target: head > link, 
type: error
}

Kami menggunakan next.js

sama di sini dengan cra

Tampaknya masalah ini disebabkan oleh sesuatu yang kira-kira seperti ini:

new Promise((resolve, reject) => {
  const script = document.createElement('script');
  script.src = src;
  script.onload = resolve;
  script.onerror = reject;
  document.body.appendChild(script);
});

Hook onerror sebenarnya akan menerima objek Event , alih-alih instance Error , yang menyebabkan masalah yang disebutkan di atas. Ini dapat dihindari dengan membungkus Event dengan Error seperti yang disarankan oleh https://developer.mozilla.org/de/docs/Web/API/HTMLScriptElement :

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

Dalam kasus saya itu adalah mekanisme prefetching 9.5.2 Next.js yang menyebabkannya di Firefox, untuk berjaga-jaga jika seseorang memiliki kasus serupa. (mungkin di sini? https://github.com/getsentry/sentry-javascript/issues/2546#issuecomment-697771381) Ini masalahnya: https://github.com/vercel/next.js/pull/16757 dan dapat diselesaikan dengan meningkatkan ke 9.5.3 atau Canary.

Kesalahannya jauh lebih bertele-tele di browser, meskipun:

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"
...

Bagaimana kita bisa mendapatkan Sentry untuk menangkap data ini?

@Turbo87 YA! Inilah tepatnya mengapa kami hanya melihatnya di halaman yang menggunakan @googlemaps/js-api-loader . Mereka melakukan persis seperti yang Anda gambarkan di sini

Terima kasih!!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat