node.js: podczas gdy wywołanie zwrotne pętli nie działa zgodnie z oczekiwaniami

Wiedząc o tym, podczas gdy Node.js działa asynchronicznie, pisząc coś takiego:

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

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

... wywoła sleep (), zablokuje serwer na czas trwania pętli while (15 sekund) i po prostu WYŚLIJ „zrobione” do konsoli. Z tego, co rozumiem, dzieje się tak dlatego, że Node.js daje tylko JavaScriptowi dostęp do głównego wątku, a zatem to porwanie zatrzyma dalsze wykonanie.

Rozumiem więc, że rozwiązaniem jest użycie wywołań zwrotnych:

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

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

console.log("DONE");

Pomyślałem, że wydrukuje to „DONE” i po 15 sekundach. „done sleeping”, ponieważ wywoływana jest funkcja sleep () i przekazywany jest wskaźnik do funkcji wywołania zwrotnego. Gdy ta funkcja działa (pętla while), wykonywana byłaby ostatnia linia (print 'done ”). Po 15 sekundach, kiedy kończy się funkcja sleep (), wywołuje podaną funkcję callback, która następnie drukuje „done sleeping”.

Najwyraźniej zrozumiałem coś złego, ponieważ oba powyższe sposoby blokują. Czy ktoś może wyjaśnić?

Z góry dzięki, Slagjoeyoco

questionAnswers(4)

yourAnswerToTheQuestion