Outstanding timers in the event loop will prevent Node.js from exiting. There are several ways of preventing this behavior when not desirable.
setTimeout returns an intsance of the Timer class. This class has an unref
method that can be used to keep the timer running, but prevent the timer from
blocking the event loop from exiting.
const timer = setTimeout(someFunction, 1_000);
timer.unref();
In the timers/promises module, there is an asynchronous version of
setTimeout that accepts options. NB that the second argument to the function
will be the return value of the promise. The third argument is for options.
import { setTimeout } from 'timers/promises';
await setTimeout(1_000, null, { ref: false });