مزيد من السياق للأخطاء
بدءًا من الإصدار 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 ، سأقوم بتحديث هذه المقالة وفقًا لذلك.