process.NextTick помещает ваш код в очередь и сразу же возвращает управление main-потоку.
Вроде как-то так.
ЗЫ: Поправьте, если я где-то ошибся.
Если ставить в очередь с помощью nextTick, то в данном случае вы получите по сути тот-же синхронный вариант.
Дело в том, что nextTick имеем высший приоритет в очереди, и если мы на основании его сделаем "рекурсивный коллбэк" то получим его четко последовательное выполнение, как обычной рекурсии.
function sleep(ms, callback) {
var cDateMs = (new Date()).getTime() + ms;
process.nextTick(function waitForTime() {
if (cDateMs > (new Date()).getTime()) {
process.nextTick(waitForTime);
} else {
callback();
}
});
}
Вместо nextTick() нужно использовать setImmidiate.
function sleep(ms, callback) {
var cDateMs = (new Date()).getTime() + ms;
setImmediate(function waitForTime() {
if (cDateMs > (new Date()).getTime()) {
setImmediate(waitForTime);
} else {
callback();
}
});
}