Back to questions
Middle
6
Как организовать асинхронное взаимодействие между фронтендом и бэкендом при длительных операциях (например, запуск расчёта оценки)? Как обрабатывать статусы и обновления?
Companies where asked
бизнес-эксперт
Answer from AI
sobes.tech AI
Для асинхронного взаимодействия между фронтендом и бэкендом при длительных операциях обычно используют следующий подход:
- Клиент отправляет запрос на запуск операции (например, расчёт оценки).
- Сервер сразу возвращает уникальный идентификатор задачи (task ID), а сама операция выполняется в фоне.
- Фронтенд периодически опрашивает сервер по этому ID (polling) или подписывается на обновления через WebSocket/Server-Sent Events.
- Сервер возвращает статус выполнения (например, "в процессе", "завершено", "ошибка") и, при необходимости, промежуточные результаты.
Пример с polling:
// Запуск задачи
fetch('/start-calculation', { method: 'POST' })
.then(res => res.json())
.then(data => {
const taskId = data.taskId;
const interval = setInterval(() => {
fetch(`/task-status/${taskId}`)
.then(res => res.json())
.then(statusData => {
console.log('Статус:', statusData.status);
if (statusData.status === 'completed') {
clearInterval(interval);
// обработать результат
}
});
}, 2000); // опрашивать каждые 2 секунды
});
Такой подход позволяет не блокировать UI и информировать пользователя о прогрессе операции.