Sobes.tech
Middle
33

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

Сұралған компаниялар
Мыс

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>;
}

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