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

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

30م مهر 1403 محراب حسن زاده
تفاوت 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 انتخاب بهتری است.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

چگونه اسکریپت‌های ساده جاوا اسکریپت را در مرورگر بنویسیم و اجرا کنیم: راهنمای کامل برای مبتدیان
2م مهر 1402

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

مطالعه بیشتر
آموزش کامل استفاده از float، clear، text و font در CSS برای طراحی وب: راهنمای جامع
6م شهریور 1402

آموزش کامل استفاده از float، clear، text و font در CSS برای طراحی وب: راهنمای جامع

مطالعه بیشتر
استفاده از font face در CSS برای اضافه کردن فونت‌های سفارشی: راهنمای کامل
16م آبان 1403

استفاده از font face در CSS برای اضافه کردن فونت‌های سفارشی: راهنمای کامل

مطالعه بیشتر
استفاده از overflow در CSS برای مدیریت محتوای اضافی: راهنمای کامل و کاربردی
11م آبان 1403

استفاده از overflow در CSS برای مدیریت محتوای اضافی: راهنمای کامل و کاربردی

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

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

مطالعه بیشتر
آموزش ایجاد، دسترسی و اصلاح آرایه‌ها در جاوا اسکریپت: راهنمای کامل
4م مهر 1403

آموزش ایجاد، دسترسی و اصلاح آرایه‌ها در جاوا اسکریپت: راهنمای کامل

مطالعه بیشتر
آموزش کار با Local Storage و Session Storage در جاوا اسکریپت: ذخیره‌سازی داده‌ها در مرورگر
3م آبان 1403

آموزش کار با Local Storage و Session Storage در جاوا اسکریپت: ذخیره‌سازی داده‌ها در مرورگر

مطالعه بیشتر
آموزش تگ‌های زمان و مکان در HTML: استفاده از time و location در صفحات وب
29م مرداد 1402

آموزش تگ‌های زمان و مکان در HTML: استفاده از time و location در صفحات وب

مطالعه بیشتر
آموزش مدیریت Box Model و ترکیب اجزای آن با CSS: کنترل دقیق فاصله‌ها و ابعاد عناصر
5م شهریور 1402

آموزش مدیریت Box Model و ترکیب اجزای آن با CSS: کنترل دقیق فاصله‌ها و ابعاد عناصر

مطالعه بیشتر
کار با border و تنظیمات آن در CSS: مدیریت زوایای گرد با border-radius
9م آبان 1403

کار با border و تنظیمات آن در CSS: مدیریت زوایای گرد با border-radius

مطالعه بیشتر
آموزش طراحی و استایل‌دهی جدول‌ها در CSS: راهنمای ساده و کاربردی
10م شهریور 1402

آموزش طراحی و استایل‌دهی جدول‌ها در CSS: راهنمای ساده و کاربردی

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

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

مطالعه بیشتر

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