مقدمه: چرا برنامهنویسی ناهمگام مهم است؟
اگر تا به حال با جاوااسکریپت کار کرده باشید، حتماً با موقعیتهایی مواجه شدهاید که باید منتظر دریافت اطلاعات از یک سرور میماندید، یا نیاز داشتید یک فایل را بخوانید و بعد از اتمام خواندن، عملیات بعدی را انجام دهید. این دقیقاً همان جایی است که مفهوم برنامهنویسی ناهمگام یا Asynchronous Programming وارد میشود. جاوااسکریپت به عنوان یک زبان تکرشتهای یا Single-Threaded طراحی شده است. این یعنی تنها یک خط کد در هر لحظه اجرا میشود. حالا سوال اینجاست: اگر جاوااسکریپت تکرشتهای است، چگونه میتواند همزمان با ارسال درخواست به سرور، رابط کاربری را هم مدیریت کند و از فریز شدن صفحه جلوگیری کند؟ پاسخ در مکانیزم Event Loop و مدل ناهمگام جاوااسکریپت نهفته است. درک این مکانیزم و ابزارهای مرتبط با آن یعنی Callback، Promise و Async/Await برای هر توسعهدهندهای که میخواهد حرفهای کار کند، ضروری است. در سالهای اولیه جاوااسکریپت، توسعهدهندگان از Callback Function برای مدیریت عملیات ناهمگام استفاده میکردند. این روش در ابتدا ساده به نظر میرسید، اما با پیچیدهتر شدن برنامهها، مشکلی به نام Callback Hell ظاهر شد. Callback Hell وضعیتی است که توابع Callback به صورت تو در تو و پشت سر هم فراخوانی میشوند و کدی غیرقابل خواندن و غیرقابل نگهداری ایجاد میکنند. برای حل این مشکل، مفهوم Promise در نسخه ES6 جاوااسکریپت معرفی شد. Promise یک شیء است که نمایانگر نتیجه نهایی یک عملیات ناهمگام است. این شیء میتواند در وضعیت موفقیت یا شکست قرار بگیرد و به توسعهدهنده اجازه میدهد کد خواناتر و ساختاریافتهتری بنویسد. پس از Promise، در نسخه ES2017، قابلیت Async/Await معرفی شد. Async/Await یک شکل جایگزین و بسیار خواناتر برای کار با Promise است که باعث میشود کد ناهمگام دقیقاً شبیه کد همگام یا Synchronous به نظر برسد. این مقاله جامع قرار است شما را از Callback Hell شروع کند، به Promise برساند، سپس Async/Await را آموزش دهد و در نهایت با مثالهای واقعی، سوالات مصاحبه و بهترین روشها، شما را به یک توسعهدهنده حرفهای در زمینه برنامهنویسی ناهمگام تبدیل کند.



