Допустим, у меня есть проект Vue (+ Vuex), в то время как вызовы API выполняются только внутри действий. И скажем, я вызываю действие, которое испускает один из этих вызовов API.
Где было бы лучшее место для обработки исключения, возвращаемого из вызова API? Имеет ли смысл позволить ему распространяться вплоть до компонента и не перехватывать его внутри действия?
Пока что я обрабатываю исключение внутри действий. Но в случае, если я хочу по-разному реагировать на каждый случай сбоя ВНУТРИ КОМПОНЕНТА (например, пометить текстовое поле красным, если код состояния ответа был 404, но сделать что-то еще, если код состояния ответа был 500), я бы хотел выбросить его вернуться к компоненту и оставить решение о том, что с ним делать, будет определено там, а не в действии.
Кажется странным, чтобы компоненты знали и управляли различными кодами состояния, которые может возвращать API (if (response.error.status === 404) {...}
), но они все еще должны знать, какой тип ошибки был возвращен.
Первый вариант Я мог подумать о том, чтобы обернуть соответствующие ошибки различными пользовательскими ошибками (создать класс для каждого типа ошибок, обнаруженных внутри действия, выбросить обернутый объект обратно в компонент, бла-бла). Не идеально, так как я перехватываю исключения в двух разных слоях и мне нужно создавать разные классы ошибок для каждой возможной ошибки.
Второй вариант заключался в том, чтобы не перехватывать его в действии и оставлять его быть пойманным в компоненте. Не очень хорошо, так как я хочу скрыть логическую часть API от компонента, который не должен знать структуру ответа.
Третьим вариантом было добавление нового свойства в хранилище, чтобы пометить сбои в этом вызове API и прослушать его в компоненте, но этот подход кажется излишним для магазина.
Я просто хотел убедиться, что я ничего не пропустил, поскольку моя дилемма звучит как нечто, что может иметь отношение практически к любому проекту. Какие-нибудь лучшие идеи архитектуры я могу использовать?