tgoop.com/prog_way_blog/226
Create:
Last Update:
Last Update:
Создание собственных ошибок в приложении
С ростом приложения может быть полезно создавать собственные ошибка для удобства их обработки, лебага и логирования. В этом посте поговорим о стандартных способах как это можно сделать.
Обычно ошибки выбрасываются следующим образом:
throw Error("Ошибка сервера")
Это удобно и быстро, но с ростом приложения можно оптимизировать и это. Для этого нужно создать собственный класс ошибки:
class CustomError extends Error {
constructor(message: string) {
super(message);
this.name = 'CustomError';
}
}
Обратите внимание, что нам нужно обязательно унаследовать собственную ошибку от стандартного класса
Error
и вызвать конструктор родительского класса через super
— это необходимые шаги для правильной инициализации собственной ошибки. this.name
устанавливается для того, чтобы ошибку в логах было проще идентифицировать. Это очень полезно, но не обязательно.Далее разберем пример создания ошибок, которые могут возникнуть в работе с
API
:class NullableRequestParameter extends Error {
constructor(message = 'Required req param is nullable') {
super(message)
this.name = 'NullableRequestParameter'
}
}
class Unauthorized extends Error {
constructor(message = 'User is unauthorized') {
super(message)
this.name = 'Unauthorized'
this.code = 401
}
}
export const RestServiceError = {
NullableRequestParameter,
Unauthorized
} as const
// где-то выбросим нужную нам ошибку
throw RestServiceError.Unauthorized()
Тут мы создаём две ошибки, которые далее сможем использовать в нашем приложении. Этап с объединением под
RestServiceError
можно опустить, это уже мой собственный код стайл. Люблю объединять общие сущности под единым началом.Кстати, чтобы обработать конкретную ошибку определенным способом, используется следующая конструкция:
try {
// код, где может быть ошибка
} catch (error) {
switch (true) {
case error instanceof RestServiceError.Unauthorized:
// обработка ошибки Unauthorized
break;
case error instanceof RestServiceError.NullableRequestParameter:
// обработка ошибки NullableRequestParameter
break;
default:
// обработка всех непредвиденных ошибок
}
}
Конструкция со
switch (true)
является более предпочтительной из-за читаемости и расширяемости, хотя можно решить ту же задачу просто через if else
.На этом всё, что я хотел описать в этой теме. Надеюсь, что это было полезно. Поддержите реакциями)
Спасибо за прочтение, это важно для меня ❤️
#web #javascript #theory #data
BY progway — программирование, IT

Share with your friend now:
tgoop.com/prog_way_blog/226