تفاوت Callbacks و Promises در جاوا اسکریپت: مقایسه جامع با مثال‌ها

دسته : آموزش رایگان جاوا اسکریپت (JavaScript)

تفاوت Callbacks و Promises در جاوا اسکریپت: مقایسه جامع با مثال‌ها

تفاوت Callbacks و Promises در جاوا اسکریپت: مقایسه جامع با مثال‌ها

در برنامه‌نویسی جاوااسکریپت، مدیریت عملیات غیرهمزمان یکی از مسائل مهم است. دو رویکرد رایج برای این کار، استفاده از Callbacks و Promises است. هر کدام از این روش‌ها کاربردها و مزایای خاص خود را دارند. در این مقاله به بررسی تفاوت این دو روش و چگونگی استفاده صحیح از آن‌ها بر اساس استانداردهای مدرن برنامه‌نویسی و سئوی گوگل خواهیم پرداخت.

 

Callbacks چیست؟

Callback یک تابع است که به عنوان آرگومان به یک تابع دیگر ارسال می‌شود و در زمانی که عملیاتی به اتمام رسید، آن تابع فراخوانی می‌شود. در عملیات غیرهمزمان مانند درخواست‌های HTTP، از Callbacks برای انجام اقداماتی بعد از اتمام عملیات استفاده می‌شود.

مثالی از استفاده‌ی Callbacks:


function fetchData(callback) {
    setTimeout(() => {
        callback('Data retrieved');
    }, 2000);
}

fetchData(function(data) {
    console.log(data); // Output: Data retrieved
});

 

این کد نشان می‌دهد که پس از ۲ ثانیه، تابع callback فراخوانی می‌شود و داده‌ها را به کنسول چاپ می‌کند.

 

مشکلات Callbacks

Callback Hell: اگر نیاز باشد چندین عملیات غیرهمزمان پشت سر هم انجام شوند، کدهای مربوطه ممکن است پیچیده و ناخوانا شوند که به آن "Callback Hell" می‌گویند.



firstFunction(() => {
    secondFunction(() => {
        thirdFunction(() => {
            console.log('Callback Hell');
        });
    });
});

 

خطایابی دشوار: زمانی که کدهای زیادی با توابع تو در تو وجود دارند، خطایابی و اشکال‌زدایی کدها بسیار دشوار می‌شود.

 

Promises چیست؟

Promise یک شیء است که نمایانگر نتیجه یک عملیات غیرهمزمان است که در آینده ممکن است انجام شود یا شکست بخورد. Promises این امکان را می‌دهد که عملیات غیرهمزمان با ظاهری شفاف‌تر و کنترل بهتر بر روی خطاها مدیریت شوند.

مثالی از Promise:



let fetchData = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('Data retrieved');
    }, 2000);
});

fetchData.then((data) => {
    console.log(data); // Output: Data retrieved
}).catch((error) => {
    console.error(error);
});

 

مزایای Promises نسبت به Callbacks

  • قابلیت خواندن بهتر: Promises کدهای غیرهمزمان را به صورت خطی‌تر و قابل فهم‌تر نمایش می‌دهند.

  • مدیریت خطاها: به جای مدیریت خطاها در هر تابع callback، می‌توان به سادگی با استفاده از catch() تمام خطاهای احتمالی را مدیریت کرد.

 

مقایسه Callbacks و Promises

Promises

Callbacks

ویژگی

به دلیل ساختار then()، خوانایی بهتر دارد

ممکن است به Callback Hell منجر شود

مدیریت عملیات چندگانه

خطاها به سادگی با catch() مدیریت می‌شوند

پیچیده و ممکن است نیاز به بررسی‌های متعدد داشته باشد

مدیریت خطاها

برای عملیات پیچیده و چندگانه مناسب‌تر است

برای عملیات ساده مناسب است

استفاده

کدهای قابل نگهداری و توسعه‌پذیرتر

کدها ممکن است پیچیده شوند

نگهداری و توسعه

 

استفاده از Async/Await

جاوااسکریپت در ES2017 مفهوم Async/Await را معرفی کرد که بر پایه Promises است و به توسعه‌دهندگان اجازه می‌دهد کدهای غیرهمزمان را به صورت همزمان‌نویسی بنویسند.



async function fetchData() {
    try {
        let data = await new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('Data retrieved');
            }, 2000);
        });
        console.log(data); // Output: Data retrieved
    } catch (error) {
        console.error(error);
    }
}

fetchData();

 

نتیجه‌گیری

هرچند که Callbacks هنوز در برخی موارد مورد استفاده قرار می‌گیرد، Promises و Async/Await امروزه به دلیل خوانایی بهتر، مدیریت ساده‌تر خطاها و توسعه‌پذیری بالا، توصیه می‌شوند. در صورتی که پروژه شما شامل عملیات غیرهمزمان پیچیده است، استفاده از Promises یا Async/Await انتخاب بهتری است.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش Responsive Design با استفاده از Media Queries: طراحی واکنش‌گرا برای تمامی دستگاه‌ها

آموزش Responsive Design با استفاده از Media Queries: طراحی واکنش‌گرا برای تمامی دستگاه‌ها

10م شهریور 1402

مطالعه بیشتر

تنظیم عرض و ارتفاع عناصر در CSS: استفاده از width، height، max و min برای کنترل دقیق اندازه‌ها

تنظیم عرض و ارتفاع عناصر در CSS: استفاده از width، height، max و min برای کنترل دقیق اندازه‌ها

9م آبان 1403

مطالعه بیشتر

آموزش کامل کنترل جریان و استفاده از if و else در جاوا اسکریپت: راهنمای جامع برای مبتدیان

آموزش کامل کنترل جریان و استفاده از if و else در جاوا اسکریپت: راهنمای جامع برای مبتدیان

2م بهمن 1402

مطالعه بیشتر

آموزش ایجاد یک پروژه ساده React: شروع کار و ساختاردهی کامپوننت‌ها

آموزش ایجاد یک پروژه ساده React: شروع کار و ساختاردهی کامپوننت‌ها

28م شهریور 1402

مطالعه بیشتر

آموزش تکنیک‌های پیشرفته CSS Grid: طراحی ساختارهای پیچیده و واکنش‌گرا

آموزش تکنیک‌های پیشرفته CSS Grid: طراحی ساختارهای پیچیده و واکنش‌گرا

18م شهریور 1402

مطالعه بیشتر

آموزش کار با flex-grow، flex-shrink و flex-basis در CSS Flexbox: مدیریت اندازه و فضای عناصر

آموزش کار با flex-grow، flex-shrink و flex-basis در CSS Flexbox: مدیریت اندازه و فضای عناصر

11م آبان 1403

مطالعه بیشتر

اصول پایه React.js: آشنایی با کامپوننت‌ها، وضعیت و رندرینگ

اصول پایه React.js: آشنایی با کامپوننت‌ها، وضعیت و رندرینگ

28م شهریور 1402

مطالعه بیشتر

آموزش ساخت یک گالری تصویر با استفاده از جاوا اسکریپت: راهنمای گام به گام

آموزش ساخت یک گالری تصویر با استفاده از جاوا اسکریپت: راهنمای گام به گام

3م آبان 1403

مطالعه بیشتر

مدیریت رویدادها در جاوا اسکریپت: اضافه و حذف Event Listeners - آموزش جامع با مثال‌ها

مدیریت رویدادها در جاوا اسکریپت: اضافه و حذف Event Listeners - آموزش جامع با مثال‌ها

2م آبان 1403

مطالعه بیشتر

آموزش کامل توابع سازنده (Constructors) و پروتوتایپ‌ها (Prototypes) در جاوا اسکریپت: راهنمای جامع

آموزش کامل توابع سازنده (Constructors) و پروتوتایپ‌ها (Prototypes) در جاوا اسکریپت: راهنمای جامع

28م مهر 1403

مطالعه بیشتر

Async/Await: نوشتن کدهای خواناتر و ناهم‌زمان در جاوا اسکریپت - آموزش کامل با مثال‌ها

Async/Await: نوشتن کدهای خواناتر و ناهم‌زمان در جاوا اسکریپت - آموزش کامل با مثال‌ها

30م مهر 1403

مطالعه بیشتر

مفاهیم پیشرفته در کلاس‌ها و وراثت (Super, Extends) در جاوا اسکریپت: راهنمای کامل و مثال‌ها

مفاهیم پیشرفته در کلاس‌ها و وراثت (Super, Extends) در جاوا اسکریپت: راهنمای کامل و مثال‌ها

29م مهر 1403

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد