به نام خدا با سلام خدمت کد ایتی های عزیز. در ادامه سری مقالات اموزشی جاوا اسکریپت این جلسه به Microtasks و tasks در جاوا اسکريپت خواهيم پرداخت با ما همراه باشید.
خب، به عنوان توسعه دهندگان جاوا اسکریپت، همه ما عادت داریم که از پراميس ها، تایمرها و غیره استفاده کنیم. هر زمان که به ایجاد یک کد خاص ناهمزمان فکر می کنیم، اولین چیزی که به ذهن ما می رسد استفاده از پراميس ها یا شاید ()setTimeout ميباشد . آیا تا به حال فکر کرده اید که این چیزها چگونه در پشت پرده کار می کنند؟
بیایید با یک تمرین سریع شروع کنیم (فقط برای تقویت مهارت های جاوا اسکریپت)
اکنون کلاه فکری خود را به سر بگذارید و فکر کنید که خروجی قطعه کد بالا چه خواهد بود!
پاسخ صحیح به این صورت است:
- call the printer
- Inside the Printer
- Promise resolved
- Timeout 1
بله خروجی دقیقاً آن چیزی که خيلي از ما انتظارش را داريم نيست. 🤷♂️ 🤷♂️. اما آنچه که در پشت صحنه جاوا اسکریپت می گذرد بسیار جذاب است.
در واقع وقتی تابع پرينتر فراخواني ميشود ابتدا ” Inside the Printer” ثبت می شود.
اکنون نکته مهمی که در اینجا باید به آن توجه شود این است که حتی زمانی که تایمر روی 0 تنظیم شده است، دستور log در داخل ()setTimeout پس از حل شدن پراميس اجرا می شود.
برای درک این موضوع، باید بدانید که ايونت لوپ چگونه tasks و microtasks را مديريت ميکند. ايونت لوپ به طور مداوم اجرا می شود و تضمین می کند که تمام task ها در صف به صورت متوالی اجرا می شوند.
بنابراین در مورد ما () setTimeout به عنوان یک تسک برنامه ریزی شده و در حلقه رویداد بعدی اجرا می شود.
اما سوال اینجاست که چگونه Promise ابتدا عبارت را ثبت می کند؟
پراميس ها به عنوان ميکروتسک ها در صف قرار ميگيرند.ميکروتسک ها مستقیماً بعد از اسکریپت در حال اجرای فعلی اجرا می شود بنابراین پراميس ها در همان حلقه رویداد resolved می شوند. فراخوانی ()then پراميس را در صف microtask قرار می دهد.تا زمانی که هیچ جاوا اسکریپتی در حين اجرا نباشد، صف ميکروتسک پس از فراخوانی پردازش می شود.
به همین دلیل است که Promise حل شده قبل از Timeout 1 ثبت می شود.
اصل این است -:
- تسک ها باید منتظر دور بعدی اجرا باشند.
- پس از اتمام اجرای اسکریپت فعلی، Microtasks می تواند در همان دور اجرا شود.
خب دوستان عزيز به پايان جلسه Microtasks و tasks در جاوا اسکريپت رسيديم اميدواريم اين مقاله براي شما مفيد واقع شده باشد.
دیدگاهتان را بنویسید