Как на клиенте обработать долгую асинхронную операцию (проверка файла на вирусы, до часа)?
AI-дан жауап
sobes.tech AI
Для обработки долгой асинхронной операции на клиенте, например, проверки файла на вирусы, которая может занимать до часа, можно использовать следующий подход:
-
Отправка файла на сервер — клиент загружает файл и получает уникальный идентификатор задачи.
-
Периодический опрос статуса — клиент с определённым интервалом (например, каждые 10-30 секунд) отправляет запрос на сервер, чтобы узнать статус проверки.
-
Отображение прогресса или статуса — показывать пользователю, что проверка в процессе, и обновлять статус по мере получения ответов.
-
Обработка результата — когда сервер сообщает, что проверка завершена, отображать результат (например, файл чист или заражён).
Пример на 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>;
}
Такой подход позволяет не блокировать интерфейс и информировать пользователя о ходе длительной операции.