Лучшее место для обработки исключений API в Vuex (в действиях или в компоненте) - PullRequest
0 голосов
/ 07 февраля 2020

Допустим, у меня есть проект Vue (+ Vuex), в то время как вызовы API выполняются только внутри действий. И скажем, я вызываю действие, которое испускает один из этих вызовов API.

Где было бы лучшее место для обработки исключения, возвращаемого из вызова API? Имеет ли смысл позволить ему распространяться вплоть до компонента и не перехватывать его внутри действия?

Пока что я обрабатываю исключение внутри действий. Но в случае, если я хочу по-разному реагировать на каждый случай сбоя ВНУТРИ КОМПОНЕНТА (например, пометить текстовое поле красным, если код состояния ответа был 404, но сделать что-то еще, если код состояния ответа был 500), я бы хотел выбросить его вернуться к компоненту и оставить решение о том, что с ним делать, будет определено там, а не в действии.

Кажется странным, чтобы компоненты знали и управляли различными кодами состояния, которые может возвращать API (if (response.error.status === 404) {...}), но они все еще должны знать, какой тип ошибки был возвращен.

Первый вариант Я мог подумать о том, чтобы обернуть соответствующие ошибки различными пользовательскими ошибками (создать класс для каждого типа ошибок, обнаруженных внутри действия, выбросить обернутый объект обратно в компонент, бла-бла). Не идеально, так как я перехватываю исключения в двух разных слоях и мне нужно создавать разные классы ошибок для каждой возможной ошибки.

Второй вариант заключался в том, чтобы не перехватывать его в действии и оставлять его быть пойманным в компоненте. Не очень хорошо, так как я хочу скрыть логическую часть API от компонента, который не должен знать структуру ответа.

Третьим вариантом было добавление нового свойства в хранилище, чтобы пометить сбои в этом вызове API и прослушать его в компоненте, но этот подход кажется излишним для магазина.

Я просто хотел убедиться, что я ничего не пропустил, поскольку моя дилемма звучит как нечто, что может иметь отношение практически к любому проекту. Какие-нибудь лучшие идеи архитектуры я могу использовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...