Menu
CoddyTech

حلقة الأحداث

جزء من قسم أساسيات 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 أن التنفيذ يحدث بأسرع ما يمكن بعد المهام المصغّرة، وليس قبلها أبدًا. تنطلق المؤقّتات حسب ترتيب مدد التأخير؛ وعند تساوي المدد، ينطلق المؤقّت الذي ضُبط أولًا أولًا.

challenge icon

التحدي

سهل
  • يطبع 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');
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس أساسيات Node.js