آموزش رایگان جاوا اسکریپت (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 انتخاب بهتری است.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

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

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

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

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

مطالعه بیشتر
آموزش اصول Web APIs و نحوه استفاده از آن‌ها در جاوا اسکریپت: راهنمای کامل با مثال‌ها
1م آبان 1403

آموزش اصول Web APIs و نحوه استفاده از آن‌ها در جاوا اسکریپت: راهنمای کامل با مثال‌ها

مطالعه بیشتر
آشنایی با انواع انتخاب‌گرها و تغییر پس‌زمینه با CSS: راهنمای جامع
4م شهریور 1402

آشنایی با انواع انتخاب‌گرها و تغییر پس‌زمینه با CSS: راهنمای جامع

مطالعه بیشتر
معرفی جاوا اسکریپت و نحوه استفاده از آن برای توسعه وب تعاملی: راهنمای جامع
27م شهریور 1402

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

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

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

مطالعه بیشتر
آموزش HTML: اولین گام برای طراحی سایت و سئو حرفه‌ای
18م مرداد 1402

آموزش HTML: اولین گام برای طراحی سایت و سئو حرفه‌ای

مطالعه بیشتر
مفاهیم پیشرفته اشیاء در جاوا اسکریپت: مدیریت خصوصیات و متدها
4م مهر 1403

مفاهیم پیشرفته اشیاء در جاوا اسکریپت: مدیریت خصوصیات و متدها

مطالعه بیشتر
آموزش کامل کار با آرایه‌ها و اشیاء در جاوا اسکریپت: ایجاد، دستکاری و پیمایش
2م شهریور 1403

آموزش کامل کار با آرایه‌ها و اشیاء در جاوا اسکریپت: ایجاد، دستکاری و پیمایش

مطالعه بیشتر
استفاده از Flexbox در CSS برای چیدمان‌های مدرن: راهنمای جامع و کاربردی
10م آبان 1403

استفاده از Flexbox در CSS برای چیدمان‌های مدرن: راهنمای جامع و کاربردی

مطالعه بیشتر
کنترل زمان‌بندی و اندازه‌گیری دقیق انیمیشن‌ها در CSS: آموزش جامع و اصول استاندارد
18م شهریور 1402

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

مطالعه بیشتر
آموزش استفاده از ماژول‌ها (Modules) در جاوا اسکریپت: آشنایی با ES6 Modules - راهنمای کامل
5م آبان 1403

آموزش استفاده از ماژول‌ها (Modules) در جاوا اسکریپت: آشنایی با ES6 Modules - راهنمای کامل

مطالعه بیشتر

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