شغل ها
شغل ها
در ES6، یک مفهوم جدید در بالای صف حلقه رویداد وجود دارد که “صف کار” نامیده می شود. محتمل ترین مواجهه شما با آن رفتار ناهمزمان Promises است (به فصل 3 مراجعه کنید).
متأسفانه، در حال حاضر مکانیسمی بدون API آشکار است، و بنابراین نشان دادن آن کمی پیچیدهتر است.
بنابراین ما باید آن را به صورت مفهومی توصیف کنیم، به طوری که وقتی در فصل 3 در مورد رفتار ناهمگام با Promises بحث می کنیم، متوجه خواهید شد که این اقدامات چگونه برنامه ریزی و پردازش می شوند.
بنابراین، بهترین راه برای فکر کردن در مورد این که من پیدا کردم این است که “صف کار” یک صف است که از انتهای هر تیک در صف حلقه رویداد آویزان است. برخی از اقدامات غیرهمگام ضمنی که ممکن است در طول یک تیک حلقه رویداد رخ دهد باعث نمی شود که یک رویداد کاملاً جدید به صف حلقه رویداد اضافه شود، بلکه در عوض یک مورد (معروف به Job) را به انتهای صف تیک فعلی اضافه می کند. .
مثل این است که بگوییم: “اوه، این کار دیگری است که باید بعدا انجام دهم، اما مطمئن شوید که بلافاصله قبل از هر اتفاق دیگری اتفاق می افتد.”
یا برای استفاده از یک استعاره: صف حلقه رویداد مانند یک سواری در شهربازی است، جایی که وقتی سواری را تمام کردید، باید به پشت خط بروید تا دوباره سوار شوید. اما صف Job مانند این است که سواری را به پایان برسانید، اما پس از آن در صف قطع کنید و دوباره به راه بیفتید.
یک Job همچنین می تواند باعث شود که مشاغل بیشتری به انتهای همان صف اضافه شوند. بنابراین، از نظر تئوری ممکن است که یک “حلقه” شغلی (شغلی که به اضافه کردن یک شغل دیگر و غیره ادامه می دهد) به طور نامحدود بچرخد، بنابراین برنامه توانایی حرکت به تیک حلقه رویداد بعدی را از بین می برد. این از نظر مفهومی تقریباً مشابه بیان یک حلقه طولانی مدت یا بی نهایت (مانند while (true) .. ) در کد شما خواهد بود.
Jobs به نوعی شبیه روح هک setTimeout (..0) است، اما به گونهای پیادهسازی میشود که سفارشی بسیار دقیقتر و تضمینشدهتر داشته باشد: بعداً، اما در اسرع وقت.
بیایید یک API را برای برنامه ریزی مشاغل (مستقیم ، بدون هک) تصور کنیم و آن را برنامه (..) بنامید. در نظر بگیرید:
console.log( “A” );
setTimeout( function(){
console.log( “B” );
}, 0 );
// theoretical “Job API”
schedule( function(){
console.log( “C” );
schedule( function(){
console.log( “D” );
} );
} );
شما ممکن است انتظار داشته باشید که این نسخه B C D را چاپ کند ، اما در عوض آن را C D B چاپ می کند ، زیرا مشاغل در انتهای حلقه رویداد فعلی اتفاق می افتد و تایمر برای برنامه ریزی برای حلقه رویداد بعدی (در صورت وجود!) آتش می گیرد.
در فصل 3 ، خواهیم دید که رفتار ناهمزمان وعده ها مبتنی بر مشاغل است ، بنابراین مهم است که چگونه این مربوط به رفتار حلقه رویداد باشد.
سفارش بیانیه
ترتیب بیان اظهارات در کد خود لزوماً به همان ترتیب موتور JS آنها را اجرا می کند. این ممکن است یک ادعای عجیب و غریب به نظر برسد ، بنابراین ما فقط به طور خلاصه آن را کشف خواهیم کرد.
اما قبل از انجام این کار ، ما باید در مورد چیزی شفاف باشیم: قوانین/گرامر زبان (به انواع و عنوان گرامر این سری کتاب مراجعه کنید) یک رفتار بسیار قابل پیش بینی و قابل اعتماد برای سفارش بیانیه از دیدگاه برنامه را دیکته می کنند. بنابراین آنچه ما در مورد بحث در مورد ما قرار داریم مواردی نیستند که شما باید در برنامه JS خود مشاهده کنید.
قوانین ارسال دیدگاه در سایت