API возвращает разные типы ошибок. При получении некоторых ошибок требуется перенаправить пользователя на другую страницу. Проблема в том, что у всех запросов на проекте есть обработчики в компонентах, которые обрабатывают как успешный, так и неуспешный ответ API. Если не прервать обработку промиса перед редиректом, то в результате до редиректа случится бесполезная перерисовка компонентов. Также в некоторых случаях возникает конфликты обновления сторов, потому при редиректе размонтирование компонента запускает очистку стора, а при отклоненном промисе срабатывает вывод ошибки через стор в том же компоненте.
Можно было бы проверять тип ошибки в каждом компоненте, но хотелось разрулить ситуацию в одном месте, потому что она нужна для всех запросов к API и для всех компонентов. Пока приходит в голову только возвращение из промиса другого зависшего промиса, но это решение выглядит небезопасно.
Как правильно разрешать такую ситуацию?
Ниже предоставляю пример псевдокода для понимания сути проблемы
Пример кодаfunction sendApiRequest(url, params) {
return fetch(url)
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.then(data => {
if (!date.success) {
if (data.code === 111) {
// Здесь нужно прервать выполнение дальнейшего кода,
// Чтобы не было дальнейших перерисовок компонентов и конфликтов при обновлении сторов
// потому что пользователь будет перенаправлен на другую страницу
window.location.replace('#/another-page');
return new Promise(() => {});
}
throw new Error('ApiError');
}
console.log(data);
})
.catch(error => {
// Handle any network errors or errors thrown in the then() blocks
console.error('NetworkError:', error);
});
}