حلقة الأحداث
جزء من قسم أساسيات Node.js في رحلة Node.js على Coddy. الدرس 18 من 24.
تُنفَّذ دوال الاستدعاء والوعود لاحقًا، وتكمن الأخطاء في عدم معرفة التوقيت الدقيق.
ينفّذ Node أولًا كل الشيفرة المتزامنة حتى نهايتها. ثم ينفّذ المهام المصغّرة: دوال استدعاء الوعود والدوال المُمرَّرة إلى queueMicrotask. بعد ذلك فقط تأتي المؤقّتات، حتى setTimeout(fn, 0)، وكلٌّ منها عند حلول موعده.
setTimeout(() => console.log('C timer'), 0);
Promise.resolve().then(() => console.log('B promise'));
console.log('A sync');
// A sync, B promise, C timerيعني التأخير البالغ 0 أن التنفيذ يحدث بأسرع ما يمكن بعد المهام المصغّرة، وليس قبلها أبدًا. تنطلق المؤقّتات حسب ترتيب مدد التأخير؛ وعند تساوي المدد، ينطلق المؤقّت الذي ضُبط أولًا أولًا.
التحدي
سهل- يطبع
order.jsالقيم1 sync،2 microtask،3 timeout،4 timeout laterبهذا الترتيب. - أبقِ الأسطر الأربعة في أماكنها. لفّها باستدعاء واحد لـ
queueMicrotaskواستدعاءين لـsetTimeout.
شغّل node order.js وقارنه بتوقعك. ثم اجعل التأخير في المؤقتين 0 وشغّله مرة أخرى.
جرّب بنفسك
// اجعل هذه الأسطر تطبع حسب ترتيب الأرقام دون نقلها.
// بدلًا من ذلك، غلّفها باستخدام queueMicrotask وsetTimeout.
console.log('4 timeout later');
console.log('3 timeout');
console.log('2 microtask');
console.log('1 sync');
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.