خطأ Node.js في السياق

كيفية إضافة سبب خطأ في الإصدار 9.3 V8 وما بعده

مزيد من السياق للأخطاء

بدءًا من الإصدار 9.3 من محرك V8 Javascript ، سيكون لدى المطورين خيار إضافة نوع جديد من المعلومات عند حدوث خطأ افتراضي. بدلاً من تقديم وسيطة واحدة ، ستكون قادرًا على إضافة نوع من نوع الخطأ ، يُسمى أيضًا سبب الخطأ ، بحيث يمكن لمعالج اكتشاف مثل هذه الأخطاء تحديد مصدر الخطأ بشكل أفضل.

لكي نكون أكثر دقة ، يقبل مُنشئ الخطأ معلمة اختيارية ثانية ، والتي هي كائن من الخيارات ، حيث يمكن استخدام الخاصية "السبب".

دعونا نلقي نظرة على مثال.

/**
 * A simple demonstration how
 * the syntax will benefit from
 * the error-cause option in
 * new Errors.
 * 
 * Note that the example is greatly
 * simplified to focus on the 
 * relevant changes.
 */
async function processImage(props) {
  try {
    await minifyImage(props);
  } catch (err) {
    throw new Error('image-minification', { cause: err });
  }
  try {
    await uploadImage(props);
  } catch (err) {
    throw new Error('image-upload', { cause: err });
  }
  try {
    await cleanUpCache(props);
    await notifyUser(props);
  } catch (err) {
    throw new Error('post-processing', { cause: err });
  }
}

//
// ... later in our code ...
//

async function selectAndUploadImage(props){
  try {
    await processImage(props);
  } catch (err) {
    console.error(err.cause);
    
    switch(err) {
      case 'image-minification':
        // handle the minification error,
        // which is available by accessing
        // 'err.cause'.
        break;
      case 'image-upload':
        // ...
        break;
      case 'post-processing':
        // ...
        break;
    }
  }
}

ميزة أسباب الخطأ

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

متوفر مع الإصدار 9.3 من V8 والإصدارات الأحدث

حتى كتابة هذه السطور ، لم يعد هذا التغيير متاحًا للاستخدام العام حتى الآن ، حيث يستخدم أحدث إصدار من Node.js 16.4.2 أحدث إصدار ثابت من V8 ، وهو 9.1. عندما يبدأ Node.js في استخدام الإصدار 9.3 ، سأقوم بتحديث هذه المقالة وفقًا لذلك.