node.js: mientras que la devolución de llamada del bucle no funciona como se esperaba

Sabiendo que mientras Node.js está trabajando de forma asíncrona, escribe algo como esto:

function sleep() {
    var stop = new Date().getTime();
    while(new Date().getTime < stop + 15000) {
        ;
    }
}

sleep();
console.log("done");

... llamaría a sleep (), bloquearía el servidor durante la duración del bucle while (15secs) y simplemente ENTONCES imprimirá "hecho" en la consola. Por lo que tengo entendido, esto se debe a que Node.js le otorga a JavaScript solo acceso al subproceso principal y, por lo tanto, este problema detendría la ejecución.

Así que entiendo que la solución a esto es usar devoluciones de llamada:

function sleep(callback) {
    var stop = new Date().getTime();
    while(new Date().getTime() < stop + 15000) {
        ;
    }
    callback();
}

sleep(function() {
    console.log("done sleeping");
});

console.log("DONE");

Así que pensé que esto imprimiría 'HECHO' y después de 15 segundos. 'hecho para dormir', ya que se llama a la función sleep () y se le entrega un puntero a una función de devolución de llamada. Mientras esta función está funcionando (el bucle while), la última línea se ejecutaría (imprimir 'hecho'). Después de 15 segundos, cuando la función sleep () finaliza, llama a la función de devolución de llamada dada, que luego imprime "terminado de dormir".

Aparentemente entendí que algo andaba mal aquí, porque las dos formas anteriores se bloquean. ¿Alguien puede aclarar por favor?

Gracias de antemano, Slagjoeyoco

Respuestas a la pregunta(4)

Su respuesta a la pregunta