Sentry-javascript: الحدث: تم تسجيل رفض الوعد غير الخاطئ بالمفاتيح: currentTarget، isTrusted، target، type

تم إنشاؤها على ٢٠ أبريل ٢٠٢٠  ·  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 كومينتر

لقد بدأنا أيضًا في رؤية هذه في الأسبوعين الماضيين. لقد بدأت للتو في البحث في الأمر ، لذا فليس لدي المزيد من التفاصيل حول سبب ذلك.

بالمثل هنا ، الآن على Sentry v5.15.5.

هل يمكن لأي شخص تقديم أي رابط لهذا النوع من الأحداث التي تم التقاطها في Sentry؟ يبدو أنه خطأ في تحميل البرنامج النصي (لاحظ target أن هذا الحدث قد بدأ في)

kamilogorek هل يمكنك من فضلك إرسال بريد إلكتروني لشركتك؟ يمكنني مشاركة أمثلة من الأحداث.

إذا كنت بحاجة إلى المزيد من الأمثلة ، فيمكنني إرسال بعضها أيضًا إلى

sheelah نعم ، من فضلك

sheelah ليس هناك الكثير يمكننا تحسينه هنا ، onunhandledrejection (نفس الشيء ينطبق على onerror في وصف OP).

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

لسوء الحظ ، لست متأكدًا مما إذا كان بإمكاننا جعلها أكثر عمومية للتعامل مع المزيد من أنواع المدخلات.
إذا كان لدى أي شخص أي تعليقات بخصوص هذه العملية ، فأنا منفتح تمامًا على الاقتراحات.

(تمت الإجابة هنا بدلاً من بريدك الإلكتروني ، لإبقاء المحادثة عامة لأي شخص آخر)

من ملاحظاتي:

  • يحدث فقط في الإصدارات الحديثة المختلفة من Safari على الهاتف المحمول أو سطح المكتب ؛
  • لدي بعض المكتبات المثبتة في تطبيق الويب الخاص بي مثل ZXing و browser-image-compression ، لكن لا توجد نصوص برمجية للتتبع تابعة لجهات خارجية ؛
  • يبدو أنه يحدث في نفس وقت فشل استدعاء API مع وجود خطأ في الشبكة (الرمز 0).
  • في حالتي ، هو على وجه التحديد ProgressEvent ، وليس مجرد حدث - والذي يبدو أنه جزء من مكتبة طلبات HTTP (أنا أستخدم axios).
ADDITIONAL DATA

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

لقد تلقيت للتو تقريرًا يتضمن "رفض الوعد بعدم وجود خطأ تم التقاطه بقيمة: خالية". على غرار @ anton-bot المذكور أعلاه ، كان المستخدم المتأثر يستخدم Safari 13.1.2 على نظام التشغيل Mac OS X 10.15.6.

لقد ألقيت نظرة على رمز التطبيق المترجم الخاص بي لمكالمات reject( حيث يتم توفير عنصر null ، لكن لم أتمكن من العثور على أي منها ، لذلك كنت أتساءل عما إذا كان قد يكون امتدادًا للمتصفح أو ثالثًا نص الحزب. نظرًا لعدم وجود أثر للمكدس أو فتات الخبز ، فمن الصعب جدًا معرفة ما حدث بالضبط.

لقد شاهدت هذا أيضًا خلال الأسبوعين الماضيين. على موقعنا ، رأيناها فقط على الصفحات التي تستخدم واجهة برمجة تطبيقات جافا سكريبت لخرائط جوجل لذلك لدي شعور بأنها قد تكون مرتبطة بذلك. هل يرى أي شخص آخر هذا على عناوين URL التي تستخدم خرائط Google؟

تحرير: حتى الآن رأينا المشكلة على 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 لهذا الموقف تحتوي دائمًا على حمولات تشبه أحداث المتصفح؟

أنا أيضا أتلقى نفس الخطأ

استنفد هذا الخطأ سعة حصتي.

لدينا 289 حدثًا من هذا في آخر 24 ساعة - ولم يتم نشر صفحتنا حتى الآن ..

{
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 ، والذي يتسبب في حدوث هذه المشكلات المذكورة أعلاه. يمكن تجنب ذلك عن طريق تغليف Event بـ Error كما هو مقترح بواسطة 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);
});

في حالتي ، كانت آلية الجلب المسبق لـ Next.js 9.5.2 هي التي تسببت في ظهورها على Firefox ، فقط في حالة وجود شخص ما لديه حالة مماثلة. (ربما هنا؟ https://github.com/getsentry/sentry-javascript/issues/2546#issuecomment-697771381) هذه هي المشكلة: https://github.com/vercel/next.js/pull/16757 ويمكن يمكن حلها بالترقية إلى 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 . إنهم يفعلون بالضبط ما تصفه هنا

شكرا لك!!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات