درود
این شکل از اجرای کد برمیگرده به نحوه تفسیر کدها توسط engine و مفسر جاوا اسکریپت
کد ها از بالا به پایین خونده میشن. هنگامی که به setTimeout میرسه میره به خط بعد و همه چیز که اجرا شد بر میگرده و شماره ۲ رو با وقفه ۰ صدم ثانیه پرینت میکنه
برای اطلاعات بیشتر ،مبحث اسکوپهارو در جاوااسکریپت دنبال کنید
درون nodejs ابتدا تمامی کدها تفسیر میشن و درون یک پشته قرار میگیرن. کدهایی که به صورت async نوشته میشن درون یک صف جداگانه به نام event loop قرار میگیرن . وقتی که کار پشته اصلی تمام بشه بعدش نوبت به اجرا شدن پشته event loop میشه.
یه حلقه وجود داره که به صورت دائم روی پشته ی اصلی اجرا میشه (به هر بار که اجرا میشه یک تیک میگن) و هر دفعه یک دستور رو از روی پشته بر میداره و اون رو اجرا میکنه. وقتی که پشته ی اصلی خالی بشه نوبت به پشته ی event loop میشه. بنابراین دستورات event base و async بعد از دستورات عادی نتیجه گیری میشن.
یه نگاه به لینک زیر بندازید خوب توضیح نداده! اما از هیچی بهتره!
https://blog.risingstack.com/node-js-at-scale-understanding-node-js-event-loop/
@ali.bayat @kazemi
ربطی به اسکوپ و تاخیر زمانی نداره. اگه دقت کنید تاخیرش صفر هست و کدها همه در یک سطح در اسکوپ گلوبال اجرا شدن.
برمیگرده به call stack و event loop stack که نود اول call stack رو خالی میکنه بعدش میره event loop stack رو اجرا میکنه پس دستورات ایونت بیس و async بعد از دستورات اصلی اجرا میشن.
کدهاتون رو به درستی قرار می دادید بهتر بودش.
دلیل کلی ش اینه که وقتی مباحث ناهمزمانی مطرح میشند، موتور جاوااسکریپت روی کدها توقف نمی کنه و میره سراغ کدهای بعدی.
در اینجا هم خط دوم کدهای شما و تابع setTimeout() باعث ایجاد این پدیده میشه.
اما در خصوص جزئیات و پشت صحنه ی نحوه عملکردش، جناب @khanzadimahdi توضیح دادند که چطور به کمک پشته ی event loop، این فرآیند صورت میگیره.
سلام خواستم به دوستان عزیز سایتی رو معرفی کنم که به صورت تصویری نحوه اجرای دستورات توی js و در مرورگر رو یاد میده البته توی github گفته که به زودی event loop مربوط به node.js رو هم اضافه میکنه خیلی جالبه فقط نمیدونم 100 درصد درست کار میکنه یا نه موفق باشید.
https://vault-developer.github.io/event-loop-explorer/
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟