برنامه نویسی

آشنایی با برنامه نویسی ناهمزمان جاوا اسکریپت: پاسخ به تماس ها، وعده ها و Async/Await

ماهیت ناهمزمان جاوا اسکریپت برای ایجاد برنامه هایی که کاربر پسند، پاسخگو و کارآمد هستند ضروری است. درک ایده‌های اساسی برنامه‌نویسی ناهمزمان، مانند تماس‌های برگشتی، وعده‌ها، و همگام‌سازی/انتظار، برای ناوبری موفق بسیار مهم است. این راهنما این ایده ها را تشریح می کند و کاربردها، مزایا و معایب آنها را بررسی می کند.


برنامه نویسی ناهمزمان در مقابل برنامه نویسی همزمان

برنامه نویسی همزمان:

  • در برنامه نویسی همزمان، وظایف به صورت متوالی اجرا می شوند. برنامه منتظر می ماند تا یک کار قبل از رفتن به کار بعدی تکمیل شود.
  • این رویکرد می تواند منجر به ناکارآمدی شود، به ویژه در طول عملیات زمان بر مانند درخواست های شبکه یا پردازش فایل.

نمونه ای از کد همزمان:

function task1() {
    console.log("Task 1 started");
    for (let i = 0; i < 1e9; i++); // Simulating a long task
    console.log("Task 1 completed");
}

function task2() {
    console.log("Task 2 started");
    for (let i = 0; i < 1e9; i++); // Simulating a long task
    console.log("Task 2 completed");
}

task1(); // Executes first
task2(); // Executes after task1 is completed
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برنامه نویسی ناهمزمان:

  • برنامه نویسی ناهمزمان به وظایف اجازه می دهد تا به طور مستقل اجرا شوند و برنامه را قادر می سازد تا در حالی که منتظر تکمیل برخی از وظایف است، به اجرای سایر عملیات ها ادامه دهد.
  • این به ویژه برای کارهایی مانند واکشی داده ها از یک سرور مفید است، جایی که انتظار می تواند در غیر این صورت رابط کاربر را مسدود کند.

چرا به برنامه نویسی ناهمزمان نیاز داریم؟

  1. پاسخگویی: از عدم پاسخگویی رابط کاربری در طول عملیات طولانی جلوگیری می کند.
  2. کارایی: امکان اجرای همزمان چندین عملیات، بهینه سازی استفاده از منابع را می دهد.
  3. تجربه کاربری: تعاملات را با اطمینان از گردش کار صاف و بدون وقفه افزایش می دهد.

تماس های تلفنی

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

مثال:

function fetchData(callback) {
    console.log("Fetching data...");
    setTimeout(() => {
        const data = "Data received"; // Simulate fetched data
        callback(data); // Execute the callback with the data
    }, 2000);
}

fetchData((data) => {
    console.log(data); // Logs after data is fetched
});
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح:

  • را fetchData تابع با استفاده از یک تاخیر شبیه سازی می کند setTimeout.
  • پس از پایان تاخیر، تماس برگشتی با داده های واکشی شده اجرا می شود.

مشکلات مربوط به Callbacks:

  • برگشت به تماس جهنم: هنگامی که چندین عملیات ناهمزمان به یکدیگر وابسته هستند، تماس های عمیق تو در تو، خواندن و نگهداری کد را سخت می کند.

وعده ها

تعریف: یک وعده شیئی است که نشان دهنده تکمیل (یا شکست) نهایی یک عملیات ناهمزمان و مقدار حاصل از آن است.

مزایا:

  • زنجیره عملیات ناهمزمان را ساده می کند.
  • مدیریت خطای بهتری را در مقایسه با کال بک ارائه می دهد.

مثال:

function fetchData() {
    return new Promise((resolve, reject) => {
        console.log("Fetching data...");
        setTimeout(() => {
            const data = "Data received";
            resolve(data); // Resolve the promise with data
        }, 2000);
    });
}

fetchData()
    .then(data => {
        console.log(data); // Logs after promise is resolved
    })
    .catch(error => {
        console.error(error); // Handles errors
    });
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح:

  • وعده ها خوانایی را با زنجیر کردن بهبود می بخشد .then() برای موفقیت و .catch() برای رسیدگی به خطا
  • آنها ساختار تودرتوی معمولی تماس های برگشتی را حذف می کنند.

Async/Await

تعریف: Async/wait قند نحوی است که بر روی وعده‌ها ساخته شده است و به شما امکان می‌دهد کد ناهمزمان بنویسید که بیشتر شبیه کد همزمان است.

مزایا:

  • خوانایی و قابلیت نگهداری کد را بهبود می بخشد.
  • منطق ناهمزمان را ساده تر مدیریت می کند.

مثال:

async function fetchAndLogData() {
    try {
        const data = await fetchData(); // Wait for the promise to resolve
        console.log(data); // Logs after data is fetched
    } catch (error) {
        console.error(error); // Handles errors
    }
}

fetchAndLogData();
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح:

  • را async کلمه کلیدی نشان می دهد که تابع حاوی کد ناهمزمان است.
  • را await کلمه کلیدی اجرا را متوقف می کند تا زمانی که وعده حل شود، و باعث می شود کد همزمان به نظر برسد و در عین حال غیر مسدود باقی بماند.

خلاصه نکات کلیدی

  1. همزمان در مقابل ناهمزمان:

    • کد همزمان اجرا را تا زمانی که کارها کامل شوند مسدود می کند.
    • کد ناهمزمان به سایر وظایف اجازه می دهد تا همزمان اجرا شوند.
  2. تماس های تلفنی:

    • تابعی برای رسیدگی به نتایج ناهمزمان ارسال می شود.
    • مستعد جهنم برگشتی با وابستگی های پیچیده.
  3. وعده ها:

    • جایگزینی پاک‌تر برای تماس‌های برگشتی، پشتیبانی از زنجیره‌سازی و مدیریت خطا.
  4. Async/Await:

    • کدهای ناهمزمان را خواناتر و قابل نگهداری تر می کند.

با درک و استفاده از این استراتژی ها می توانید برنامه های جاوا اسکریپتی را توسعه دهید که استفاده از آنها موثر و آسان باشد. یادگیری برنامه نویسی ناهمزمان برای تبدیل شدن به یک توسعه دهنده ماهر جاوا اسکریپت ضروری است، چه در حال مدیریت وظایف ساده یا ایجاد گردش کار پیچیده باشید.

من را در : موضوعات لینکدین Github دنبال کنید

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا