¿Se requiere setTimeout?

Tengo una pregunta para sincronizar, esperar y configurar Timeout (). Pensé, uso funciones asincrónicas para procesos lentos. Así que lo probé con un bucle grande. En mi computadora, se necesitan unos segundos para ejecutar el siguiente código:

function slowFunction() {
    return new Promise(resolve => {
        setTimeout(() => {
            for (let i = 0; i < 4000000000; i++) {};
            resolve('Ready at ' + new Date().toLocaleTimeString('de'));
        }, 0);
    });
};


console.log('Start: ' + new Date().toLocaleTimeString('de'));

(async () => {
    console.log('Call slow function.');
    console.log(await slowFunction());
})();

console.log('There is no need to wait for the slow function: ' + new Date().toLocaleTimeString('de'));

La salida es:

Start: 16:39:20
Call slow function.
There is no need to wait for the slow function: 16:39:20
Ready at 16:39:23

Y ahora la pregunta: ¿Cuál es la diferencia con el siguiente código:

function slowFunction() {
    return new Promise(resolve => {
        for (let i = 0; i < 4000000000; i++) {};
        resolve('Ready at ' + new Date().toLocaleTimeString('de'));
    });
};

console.log('Start: ' + new Date().toLocaleTimeString('de'));

(async () => {
    console.log('Call slow function.');
    console.log(await slowFunction());
})();

console.log('There is no need to wait for the slow function: ' + new Date().toLocaleTimeString('de'));

La salida es:

Start: 16:39:20
Call slow function.
There is no need to wait for the slow function: 16:39:23
Ready at 16:39:23

Por el primer ejemplo, parece asíncrono. En el segundo ejemplo, la función espera el final del ciclo.

¿Tengo que usar setTimeout o tengo un error en el código o me estoy equivocando? En ambos casos, la declaración de resolución está detrás del bucle grande.

La mayoría de los ejemplos para async y aguardan setTimeout usados, pero creo que es solo para simular un descanso.

Gracias por su ayuda por adelantado.

Best saluda a Pascal

Respuestas a la pregunta(2)

Su respuesta a la pregunta