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

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

عملگرها و عبارات محاسباتی در جاوا اسکریپت: نحوه استفاده و کاربردهای مختلف
28م شهریور 1402

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

مطالعه بیشتر
تفاوت Data و Computed Properties در Vue.js | آموزش کاربردی و مثال‌محور
21م آذر 1404

تفاوت Data و Computed Properties در Vue.js | آموزش کاربردی و مثال‌محور

مطالعه بیشتر
آموزش کامنت‌ها و کاراکترهای خاص در HTML و CSS: نحوه استفاده و مدیریت
23م مرداد 1402

آموزش کامنت‌ها و کاراکترهای خاص در HTML و CSS: نحوه استفاده و مدیریت

مطالعه بیشتر
آموزش کامنت‌گذاری در PHP بر اساس استاندارد گوگل و Clean Code
21م خرداد 1405

آموزش کامنت‌گذاری در PHP بر اساس استاندارد گوگل و Clean Code

مطالعه بیشتر
آموزش Pseudo-classes در CSS: تغییر استایل عناصر با hover، focus و nth-child
10م شهریور 1402

آموزش Pseudo-classes در CSS: تغییر استایل عناصر با hover، focus و nth-child

مطالعه بیشتر
آموزش CSS Blend Modes: ادغام رنگ‌ها و تصاویر برای طراحی وب جذاب
9م آبان 1403

آموزش CSS Blend Modes: ادغام رنگ‌ها و تصاویر برای طراحی وب جذاب

مطالعه بیشتر
راهنمای جامع نصب و پیکربندی محیط توسعه محلی (XAMPP، WAMP و Laragon)
14م خرداد 1405

راهنمای جامع نصب و پیکربندی محیط توسعه محلی (XAMPP، WAMP و Laragon)

مطالعه بیشتر
آموزش Directive‌ های Vue.js | استفاده از v-model، v-bind و v-show با مثال
23م آذر 1404

آموزش Directive‌ های Vue.js | استفاده از v-model، v-bind و v-show با مثال

مطالعه بیشتر
کار با تصاویر SVG در CSS: کنترل استایل و استفاده از گرافیک‌های مقیاس‌پذیر
16م آبان 1403

کار با تصاویر SVG در CSS: کنترل استایل و استفاده از گرافیک‌های مقیاس‌پذیر

مطالعه بیشتر
آموزش کامل ویژگی background در CSS: تنظیمات پس‌زمینه برای طراحی وب راهنمای جامع
5م شهریور 1402

آموزش کامل ویژگی background در CSS: تنظیمات پس‌زمینه برای طراحی وب راهنمای جامع

مطالعه بیشتر
آموزش کار با رویدادهای فرم و اعتبارسنجی فرم‌ها در جاوا اسکریپت: راهنمای جامع
3م آبان 1403

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

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

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

مطالعه بیشتر

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