بررسی اجمالی فصل
در آخر این فصل، شما توانایی به کار گیری برنامه نویسی asynchronous و تکنیک های مختلف اون، تله های callback hell (جهنم کال بک ها!) و pyramid of doom (هرم عذاب)، استفاده از promise ها برای اجرای کد بعد از کامل شدن عملیات، استفاده از سینتکس async/await برای اینکه کد های asynchronous (ناهمزمان) به شکل متوالی به نظر برسن و استفاده از Fetch API برای ایجاد remote call ها رو خواهید داشت.
معرفی فصل
تسک های async (مخفف asynchronous) به فرایند اجرایی رشته (thread) اصلی برنامه اجازه میدن تا حتی موقعی که منتظر دریافت دیتا، رویداد و یا نتیجه یک پروسه دیگه هست به کار های دیگه ادامه بده و این باعث میشه که رابط کاربری روون تری داشته باشیم و همچنین بعضی از روش های مولتی تسکینگ رو در پیش بگیریم.
برخلاف بقیه زبان هایی که میتونن چندین thread همزمان در حال اجرا داشته باشن، جاوا اسکریپت معمولا در یک thread اجرا میشه. تا اینجا و توی فصل قبلی با جزئیات در مورد اینکه چطور مدل single-threaded جاوا اسکریپت توسط event loop (حلقه رویداد) و event queue (صف رویداد) هندل میشه توضیح دادیم. در پشت صحنه، ران تایم مرورگر یا Node.js دارای thread های در حال اجرا در پس زمینه هستن که به رویداد ها گوش میدن یا سرویس کال ایجاد میکنن، و وقتی که یک رویداد جدید و یا پاسخ یک سرویس کال دریافت میشه، به صف رویداد اضافه میشه. جاوا اسکریپت به طور پیوسته این صف رو اسکن میکنه و زمانی که هندلر های اون رویداد ها آماده بودن اون ها رو کال میکنه. هندلر های رویداد بیشتر شامل متد های کال بک میشن، اما نوع های دیگه ای هم ازشون وجود داره، مثل Promise ها که قراره توی این فصل اون ها رو توضیح بدیم.
کار بعضی از thread ها بیشتر از بقیه طول میکشه. توی یک رستوران، آماده کردن یک استیک زمان بیشتری نسبت به ریختن یک نوشیدنی در لیوان میگیره، اما بخاطر اینکه هیچ وابستگی بین این دو وجود نداره، میتونن به صورت همزمان آماده بشن؛ اما حتی اگه اون لیوان نوشیدنی چند دقیقه بعد از استیک سفارشی داده شده باشه، به احتمال زیاد قبل از نوشیدنی به میز مشتری آورده میشه، حتی اگه توسط همون کارگر (worker) قبلی انجام بشه. این اساسا ایده پردازش async هست. (برای اینکه مثالمون رو کمی جلوتر ببریم، هر وقت یک آیتم برای سرو شدن به مشتری آماده باشه، اون آیتم ها توسط کارکنان آشپزخونه در صف (queue) کارگر قرار میگیرن. کارگر به طور پیوسته صف خودش رو برای چیز هایی که باید به میز بقیه سرو بشه چک میکنه.)
نسخه های قدیمی تر جاوا اسکریپت بیشتر از کال بک ها برای پیاده سازی این قابلیت استفاده میکردن، اما همونطور که قراره ببینید، به زودی بعد از اون عواقب منفی ایجاد callback hell آشکار شد. بعدش توی ECMAScript 2015 یک راه جایگزین به نام Promise جایگزین شد، که کمک زیادی میکرد، اما هنوز یه چیزی کم بود. در ECMAScript 2017 کلیدواژه ها و سینتکس جدیدی به نام async/await معرفی شد که کد async رو ساده تر کرد و باعث شد که از جنبه های مختلف شبیه کد های متوالی و پشت سر هم معمولی باشه. توی قسمت های بعدی هر کدوم از این ها رو بررسی کردیم.