node.js: обратный вызов цикла while работает не так, как ожидалось

Зная, что когда Node.js работает асинхронно, напишите что-то вроде этого:

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

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

... вызовет sleep (), заблокирует сервер на время цикла while (15 сек) и только затем напечатает «done» на консоли. Насколько я понимаю, это потому, что Node.js предоставляет JavaScript доступ только к основному потоку, и, следовательно, эта штука остановит дальнейшее выполнение.

Поэтому я понимаю, что решение этой проблемы заключается в использовании обратных вызовов:

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

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

console.log("DONE");

Так что я подумал, что это напечатает «Готово» и через 15 секунд. 'done sleep', поскольку вызывается функция sleep (), которой передается указатель на функцию обратного вызова. Пока эта функция работает (цикл while), будет выполнена последняя строка (выведите «done»). Через 15 секунд, когда функция sleep () завершает работу, она вызывает данную функцию обратного вызова, которая затем выводит сообщение «done sleep».

Видимо я тут что-то не так понял, потому что оба вышеперечисленных способа блокируют. Кто-нибудь может уточнить, пожалуйста?

Спасибо заранее, Slagjoeyoco