← Назад ко всем вопросам

Как написать Wait без использования Promise

1️⃣ Как кратко ответить

Для реализации функции ожидания без использования Promise в JavaScript можно использовать функцию setTimeout в сочетании с циклом, который блокирует выполнение кода на определенное время. Однако это не рекомендуется, так как блокирует основной поток выполнения.

2️⃣ Подробное объяснение темы

В JavaScript, когда мы говорим о "ожидании", мы обычно имеем в виду задержку выполнения кода на определенное время. Обычно для этого используется Promise вместе с функцией setTimeout. Однако, если мы хотим реализовать ожидание без использования Promise, мы можем использовать блокирующий цикл. Это не является хорошей практикой, так как блокирует основной поток выполнения и делает приложение неотзывчивым, но для образовательных целей можно рассмотреть такой подход.

Пример реализации функции ожидания без Promise

function wait(milliseconds) {
    const start = Date.now(); // Запоминаем текущее время
    let now = start; // Инициализируем переменную now текущим временем
​
    // Цикл будет выполняться, пока разница между текущим временем и стартовым не станет больше заданного времени ожидания
    while (now - start < milliseconds) {
        now = Date.now(); // Обновляем текущее время
    }
}
​
// Пример использования
console.log('Start waiting...');
wait(2000); // Ожидание 2 секунды
console.log('Finished waiting.');

Объяснение кода

  1. function wait(milliseconds): Определяем функцию wait, которая принимает один аргумент — количество миллисекунд, на которое нужно задержать выполнение.

  2. const start = Date.now();: Сохраняем текущее время в переменную start. Date.now() возвращает количество миллисекунд, прошедших с 1 января 1970 года.

  3. let now = start;: Инициализируем переменную now значением start. Это нужно для того, чтобы отслеживать текущее время в цикле.

  4. while (now - start < milliseconds): Запускаем цикл, который будет выполняться, пока разница между текущим временем (now) и стартовым временем (start) меньше заданного времени ожидания (milliseconds).

  5. now = Date.now();: Внутри цикла обновляем значение now текущим временем. Это позволяет циклу проверять, сколько времени прошло с начала ожидания.

  6. console.log('Start waiting...'); и console.log('Finished waiting.');: Эти строки выводят сообщения в консоль до и после вызова функции wait, чтобы продемонстрировать задержку.

Почему это не рекомендуется

Использование блокирующего цикла, как в примере выше, делает приложение неотзывчивым, так как JavaScript выполняется в одном потоке. Это значит, что пока выполняется цикл ожидания, никакие другие операции, включая обработку пользовательского интерфейса, не могут быть выполнены. Это может привести к зависанию приложения и плохому пользовательскому опыту. В реальных приложениях для ожидания лучше использовать асинхронные методы, такие как Promise и async/await.

Тема: JavaScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки