"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنك التعامل مع الأخطاء في عمليات الاسترجاعات غير المتزامنة التي لا تقع ضمن نطاق الوعد؟

كيف يمكنك التعامل مع الأخطاء في عمليات الاسترجاعات غير المتزامنة التي لا تقع ضمن نطاق الوعد؟

تم النشر بتاريخ 2024-11-04
تصفح:845

How Can You Handle Errors in Asynchronous Callbacks That Are Not Within a Promise\'s Scope?

التعامل مع الأخطاء غير المتزامنة مع تسلسل الوعد

عند العمل مع التعليمات البرمجية غير المتزامنة، من الضروري التفكير في كيفية التعامل مع الأخطاء بشكل فعال. يمكن أن تؤدي الاستثناءات التي لم يتم اكتشافها إلى تعطل تطبيقك، لذلك من المهم أن يكون لديك استراتيجية جاهزة.

في السيناريو الموصوف، يتم إنشاء وعد باستخدام setTimeout الذي يلقي خطأ. لن يلتقط معالج الالتقاط الخاص بـ Bluebird Promise هذا الخطأ لأنه يحدث ضمن رد اتصال غير متزامن.

معالجة الاستثناءات داخل الوعود

ومع ذلك، يمكن للوعود التقاط الاستثناءات التي يتم طرحها داخل وظائف رد الاتصال الخاصة بهم. للتعامل مع هذا النوع من الأخطاء، يمكنك:

function getPromise() {
  return new Promise(function(done, reject) {
    setTimeout(done, 500);
  }).then(function() {
    console.log("hihihihi");
    throw new Error("Oh no!");
  });
}

هنا، يتم طرح الخطأ ضمن رد الاتصال ثم، مما يضمن أنه سيتم اكتشافه بواسطة معالج الالتقاط الخاص بـ Promise.

تحذيرات مع عمليات الاسترجاعات غير المتزامنة

من المهم أن تتذكر أن الوعود لا تلتقط استثناءات من عمليات الاسترجاعات غير المتزامنة التي لا تقع ضمن نطاق اختصاصها. للتعامل مع هذه الأنواع من الأخطاء، ضع في اعتبارك ما يلي:

  1. استخدام Promise.delay: يقوم Promise.delay بتغطية رد اتصال غير متزامن لإرجاع Promise. سيتم اكتشاف أي أخطاء يتم طرحها في رد الاتصال بواسطة Promise.
  2. رفض الوعد المحيط: كلما أمكن، ارفض الوعد المحيط برد الاتصال غير المتزامن بدلاً من طرح استثناء.

مثال للتعامل مع عمليات رد الاتصال غير المتزامنة المارقة

للتعامل مع عمليات رد الاتصال غير المتزامنة المارقة في Node.js أو المتصفح، يمكنك استخدام الطريقة التالية:

function getPromise() {
  return new Promise(function(done, reject) {
    setTimeout(function() {
      try {
        // Your rogue async callback here
        console.log("hihihihi");
      } catch (e) {
        reject(e);
      }
    }, 500);
  });
}

من خلال التعامل يدويًا مع أي استثناءات ضمن رد الاتصال، يضمن هذا الأسلوب أنها لن تؤدي إلى تعطل تطبيقك.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3