Your question is Debugging Async with setTimeout. Take a moment with it on the right.
Talk me through your thinking if you like. When you're confident, submit your answer and I'll grade it like a real screen (7/10 or better passes).
UiPath's automation dashboard has a status widget that retries a flaky health check with setTimeout. A frontend engineer is asked to trace through the console output before touching the retry logic.
console.log("start");
setTimeout(() => {
console.log("timeout 0ms");
}, 0);
Promise.resolve().then(() => {
console.log("promise 1");
});
function scheduleRetry(attempt) {
if (attempt > 2) {
console.log("done retrying");
return;
}
console.log("attempt " + attempt);
setTimeout(() => scheduleRetry(attempt + 1), 0);
}
scheduleRetry(1);
Promise.resolve().then(() => {
console.log("promise 2");
});
console.log("end");
What is the exact order this logs to the console? Explain what runs first, what gets queued, and when each callback actually executes.