לולאת האירועים
חלק מהיחידה יסודות 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 פירושה בהקדם האפשרי לאחר משימות המיקרו, ולעולם לא לפניהן. הטיימרים מופעלים לפי סדר ההשהיה שלהם; כשההשהיות שוות, הטיימר שהוגדר ראשון מופעל ראשון.
אתגר
קל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');
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.