• Как в JS сделать функцию асинхронной?

    @anton_ky
    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();
        }
      });
    }
    Ответ написан
    Комментировать