The microtask queue is drained completely after each callback. A chain of microtasks that keeps adding new ones can starve timers and I/O.