Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: Promise, animation, requestAnimationFrame, asynchronous

Можно ли сделать анимацию только на Promise?

Вопрос проверяет понимание ограничений Promise как инструмента для создания анимаций и необходимости использования дополнительных API, таких как requestAnimationFrame.

Короткий ответ

Нет, анимацию только на Promise сделать нельзя. Promise управляет порядком выполнения асинхронных операций, но не предоставляет механизма для плавного изменения состояния во времени. Для анимации требуется requestAnimationFrame или setInterval, которые вызывают обновление кадра. Promise можно использовать для организации последовательности анимаций, но не для самого рендеринга.

Длинный ответ

Почему Promise не подходит для анимации

Promise — это объект, представляющий результат асинхронной операции. Он позволяет выполнять код после завершения задачи, но не предоставляет средств для управления временем или частотой обновления. Анимация требует изменения свойств элемента (например, позиции или прозрачности) с определенной частотой (обычно 60 кадров в секунду). Promise не может генерировать такие повторяющиеся вызовы.

Как можно использовать Promise в анимации

Promise может быть полезен для организации последовательности анимаций. Например, вы можете создать функцию, которая возвращает Promise, разрешающийся после завершения одного анимационного шага. Затем с помощью цепочки .then() можно запустить следующий шаг. Однако сам шаг анимации должен быть реализован с помощью requestAnimationFrame или setInterval.

Пример кода

function animateElement(element, targetPosition, duration) {
  return new Promise((resolve) => {
    const start = performance.now();
    const startPosition = element.offsetLeft;

    function step(currentTime) {
      const elapsed = currentTime - start;
      const progress = Math.min(elapsed / duration, 1);
      const currentPosition = startPosition + (targetPosition - startPosition) * progress;
      element.style.left = currentPosition + 'px';

      if (progress < 1) {
        requestAnimationFrame(step);
      } else {
        resolve();
      }
    }

    requestAnimationFrame(step);
  });
}

// Использование
const box = document.getElementById('box');
animateElement(box, 300, 1000)
  .then(() => animateElement(box, 100, 500));

Вывод

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    3

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

  • React

    React

Ключевые слова

#Promise

#animation

#requestAnimationFrame

#asynchronous

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию