Sobes.tech
Back to questions
Middle
7

Как на клиенте обработать долгую асинхронную операцию (проверка файла на вирусы, до часа)?

Companies where asked
Мыс

Answer from AI

sobes.tech AI

Для обработки долгой асинхронной операции на клиенте, например, проверки файла на вирусы, которая может занимать до часа, можно использовать следующий подход:

  1. Отправка файла на сервер — клиент загружает файл и получает уникальный идентификатор задачи.

  2. Периодический опрос статуса — клиент с определённым интервалом (например, каждые 10-30 секунд) отправляет запрос на сервер, чтобы узнать статус проверки.

  3. Отображение прогресса или статуса — показывать пользователю, что проверка в процессе, и обновлять статус по мере получения ответов.

  4. Обработка результата — когда сервер сообщает, что проверка завершена, отображать результат (например, файл чист или заражён).

Пример на React с использованием setInterval:

function VirusCheck({ taskId }) {
  const [status, setStatus] = React.useState('pending');

  React.useEffect(() => {
    const interval = setInterval(() => {
      fetch(`/api/check-status/${taskId}`)
        .then(res => res.json())
        .then(data => {
          setStatus(data.status);
          if (data.status === 'done' || data.status === 'error') {
            clearInterval(interval);
          }
        });
    }, 30000); // опрос каждые 30 секунд

    return () => clearInterval(interval);
  }, [taskId]);

  return <div>Статус проверки: {status}</div>;
}

Такой подход позволяет не блокировать интерфейс и информировать пользователя о ходе длительной операции.