Bird
Raised Fist0
Node.jsframework~10 mins

Event loop phases and timer execution in Node.js - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to schedule a function to run after 1000 milliseconds.

Node.js
setTimeout(() => { console.log('Hello after 1 second'); }, [1]);
Drag options to blanks, or click blank then click option'
Anull
B10
C0
D1000
Attempts:
3 left
💡 Hint
Common Mistakes
Using 0 or null will cause the callback to run immediately or not at all.
Confusing seconds with milliseconds.
2fill in blank
medium

Complete the code to schedule a function to run repeatedly every 500 milliseconds.

Node.js
const intervalId = setInterval(() => { console.log('Repeating every 0.5 seconds'); }, [1]);
Drag options to blanks, or click blank then click option'
A500
B1000
C50
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Using 0 will cause the callback to run as fast as possible, which is not intended.
Confusing interval time with timeout delay.
3fill in blank
hard

Fix the error in the code to clear the interval after 3 seconds.

Node.js
const id = setInterval(() => { console.log('Tick'); }, 1000);
setTimeout(() => { clearInterval([1]); }, 3000);
Drag options to blanks, or click blank then click option'
AtimerId
BintervalId
Cid
DtimeoutId
Attempts:
3 left
💡 Hint
Common Mistakes
Using a variable name that was never declared.
Confusing interval ID with timeout ID.
4fill in blank
hard

Fill both blanks to create a Promise that resolves after 2 seconds using setTimeout.

Node.js
const delay = ms => new Promise(resolve => {
  setTimeout(() => {
    [1]();
  }, [2]);
});
Drag options to blanks, or click blank then click option'
Aresolve
Bms
Cconsole.log
DclearTimeout
Attempts:
3 left
💡 Hint
Common Mistakes
Calling reject instead of resolve.
Using console.log instead of resolve.
Passing wrong delay time.
5fill in blank
hard

Fill all three blanks to create a map of words to their lengths, but only for words longer than 3 characters.

Node.js
const words = ['apple', 'bat', 'carrot', 'dog'];
const lengths = words.reduce((acc, [3]) => {
  if ([3].length > 3) {
    acc[[1]] = [2];
  }
  return acc;
}, {});
Drag options to blanks, or click blank then click option'
Aword
Bword.length
Ditem
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong variable names.
Using length as key instead of word.
Not filtering words by length.

Practice

(1/5)
1. Which phase of the Node.js event loop executes setTimeout callbacks?
easy
A. Check phase
B. Timers phase
C. Poll phase
D. Close callbacks phase

Solution

  1. Step 1: Understand event loop phases

    The Node.js event loop has multiple phases, each handling different types of callbacks.
  2. Step 2: Identify where timers run

    The timers phase is specifically designed to execute callbacks scheduled by setTimeout and setInterval.
  3. Final Answer:

    Timers phase -> Option B
  4. Quick Check:

    Timers phase = setTimeout callbacks [OK]
Hint: Timers run in the timers phase, not immediately [OK]
Common Mistakes:
  • Confusing timers phase with poll phase
  • Thinking setTimeout runs immediately
  • Mixing check phase with timers phase
2. Which of the following is the correct syntax to schedule a function to run after 0 milliseconds in Node.js?
easy
A. setTimeout(console.log('Hi'))
B. setTimeout(console.log('Hi'), 0);
C. setTimeout(0, () => console.log('Hi'));
D. setTimeout(() => console.log('Hi'), 0);

Solution

  1. Step 1: Check function syntax for setTimeout

    The first argument must be a function, not the result of a function call.
  2. Step 2: Analyze each option

    setTimeout(() => console.log('Hi'), 0); passes a function that logs 'Hi' after 0 ms delay correctly. setTimeout(console.log('Hi'), 0); calls console.log immediately and passes its result (undefined). setTimeout(0, () => console.log('Hi')); passes 0 (number) as first argument instead of a function, causing a TypeError on execution. setTimeout(console.log('Hi')) calls console.log immediately without delay argument.
  3. Final Answer:

    setTimeout(() => console.log('Hi'), 0); -> Option D
  4. Quick Check:

    Function as first argument = setTimeout(() => console.log('Hi'), 0); [OK]
Hint: Pass a function, not a function call, to setTimeout [OK]
Common Mistakes:
  • Calling the function immediately inside setTimeout
  • Omitting the delay argument
  • Passing non-function as first argument
3. What will be the output order of the following code?
console.log('Start');
setTimeout(() => console.log('Timeout 1'), 0);
setTimeout(() => console.log('Timeout 2'), 10);
console.log('End');
medium
A. Start, End, Timeout 1, Timeout 2
B. Start, Timeout 1, Timeout 2, End
C. Timeout 1, Timeout 2, Start, End
D. Start, Timeout 2, End, Timeout 1

Solution

  1. Step 1: Identify synchronous and asynchronous parts

    console.log('Start') and console.log('End') run immediately in order. setTimeout callbacks run later.
  2. Step 2: Understand timer delays and event loop

    setTimeout with 0 ms delay runs after current code finishes, before 10 ms delay callback.
  3. Final Answer:

    Start, End, Timeout 1, Timeout 2 -> Option A
  4. Quick Check:

    Synchronous logs first, then timers by delay [OK]
Hint: Synchronous logs run before any setTimeout callbacks [OK]
Common Mistakes:
  • Assuming 0 ms timeout runs immediately
  • Mixing order of synchronous and asynchronous logs
  • Ignoring timer delays
4. Identify the error in this code snippet:
setTimeout(console.log('Hello'), 1000);
medium
A. The delay argument is missing
B. The delay must be 0 or less
C. console.log is called immediately instead of after 1000ms
D. setTimeout requires a string as first argument

Solution

  1. Step 1: Analyze the first argument of setTimeout

    console.log('Hello') is called immediately, returning undefined, which is passed to setTimeout.
  2. Step 2: Understand correct usage

    setTimeout expects a function as first argument, not the result of a function call.
  3. Final Answer:

    console.log is called immediately instead of after 1000ms -> Option C
  4. Quick Check:

    Function call inside setTimeout runs immediately [OK]
Hint: Pass a function, not a function call, to setTimeout [OK]
Common Mistakes:
  • Thinking delay argument is missing
  • Passing string instead of function
  • Believing delay must be zero or negative
5. Consider this code:
console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
console.log('D');
What is the correct order of output?
hard
A. A, D, C, B
B. A, B, D, C
C. A, D, B, C
D. A, C, D, B

Solution

  1. Step 1: Identify synchronous, microtask, and timers

    console.log('A') and console.log('D') run immediately. Promise.then callbacks run in microtasks after current code. setTimeout callbacks run in timers phase later.
  2. Step 2: Determine execution order

    Output order is synchronous logs first (A, D), then microtasks (C), then timers (B).
  3. Final Answer:

    A, D, C, B -> Option A
  4. Quick Check:

    Microtasks run before timers [OK]
Hint: Promise.then runs before setTimeout even with 0 delay [OK]
Common Mistakes:
  • Assuming setTimeout runs before Promise.then
  • Mixing synchronous and asynchronous order
  • Ignoring microtask queue priority