Menu
CoddyTech

לולאת האירועים

חלק מהיחידה יסודות Node.js במסלול ה-Node.js של Coddy. שיעור 18 מתוך 24.

קריאות חוזרות ו־promises מתבצעים מאוחר יותר, ובאגים מסתתרים באי־ידיעה מדויקת של העיתוי.

Node מריץ תחילה את כל הקוד הסינכרוני עד סופו. לאחר מכן הוא מריץ משימות מיקרו: קריאות חוזרות של promises ופונקציות שמועברות אל 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