javascript best way for error handling

روشی بهتر از try-catch برای مدیریت خطا در JS

مدیریت خطا و مشکل Try-Catch!

یکی از مهم ترین بخش های هر برنامه که گاهی بواسطه پیچیدگی کدها تبدیل به یک چالش بزرگ برای هر برنامه نویسی می شود. یکی از روش های مرسوم برای مدیریت خطا استفاه از بلوک های try-catch هست. در جاوااسکریپت نیز بطور مرسوم از همین روش استفاده می شود بالاخص در توابع غیرهمزمان. مشکلی که در استفاده از این روش وجود دارد، این است که در صورتی که شما درگیر یک مدیریت خطای چند لایه شوید، مجبور به استفاده از بلوک های try-catch تودر تو هستید که این باعث می شود کد شما به سرعت به سمت پیچیدگی پیش برود، خوانایی سخت و توسعه و نگهداری به مراتب سخت تر بشود.

async function fetchData() {
try {
const response = await fetch( "https://api.example.com/data" ) ;

try {
const data = await response.json( ) ;
return data;
}
catch (parseError) {
console. error( 'Failed to parse JSON: ',parseError);
} 
} catch (networkError) {
console.error( 'Network request failed: ' ,
networkError);
}
}

راه حل: عملگر =?

اما برای توسعه دهندگان جاوااسکریپت، راه حل، استفاده از عملگر =? است که به شما اطمینان می دهد که فضای مدیریت خطای شما ساده تر، تمیزتر و راحت تر باشد. این عملگر جدید جایگزینی ساده و موثر برای روش های قبلی است. در این روش به جای استفاده از بلوک های مجزای try-catch برای هر خطا، خطا در یک خط و بطور مستقیم دریافت می شود که این باعث سادگی و خوانایی کد شما خواهد شد.


چگونه کار می کند؟

خروجی این عملگر یک زوج مقدار به شکل مقابل است: [error, result]

در صورت بروز خطا مقدار آن در error قرار گرفته و در متغیر result مقدار null قرار می گیرد.

در صورت عدم دریافت خطا، خروجی در result قرار گرفته و error مقدار null خواهد داشت.

const [error, data] ?= await fetch("https://apt.example.com/data" ).json( )
if (error) {
console.error('Error occurred:', error);
} else {
console.log( 'Data fetched successfully:', data);
}

مزایای عملگر =?

  1. کد تمیزتر: با عملگر =? شما می توانید خطاهای احتمالی را در یک خط به دست بیاورید، آنهم بدون استفاده از بلوک های try-catch پیچیده و زیاد.
  2. مدیریت خطای متمرکز: به جای پخش کردن مدیریت خطا در بخش های مختلف تابع، همه چیز را در یک مکان متمرکز کنید تا برنامه شما خوانایی بیشتر و راحت تری داشته باشد.
  3. کارایی بهتر: بدون لایه های زیاد و تودرتوی try-catch، اجرای برنامه بهتر خواهد شد.
  4. مدیریت راحت تر asyc: برای توابع غیرهمزمان، این عملگر اجازه مدیریت خطا بدون فداکردن عملکرد را ارائه می دهد که بسیار مناسب API ها و وب اپلیکیشن ها می باشد.

قبل از عمل و بعد از عمل :)

روش قدیم (استفاده از try-catch)

async function loadConfig() {
try{
const fileContents = await
readFile( "config. json");
try{
const config = JSON. parse(fileContents);
return config;
} catch (parseError) {
console.error('Error parsing JSON:', parseError);
}
} catch (readError) {
console.error('Error reading file:', readError);
}
}

روش جدید (عملگر =?)

const [readError, fileContents] ?= await readFile("config. json");
const [parseError, config] = fileContents ? JSON.parse(fileContents)?= : [new Error("No file contents"),
null];
if (readError) {
console.error('Error reading file:', readError);
} else if (parseError) {
console.error('Error parsing JSON:', parseError);
} else {
console. log('Configuration loaded successfully:', config);
}

مطالب مرتبط