Нетривиальная
обработка ошибок
Презентацию подготовил
Сергей Яркин
Тензор, 2015
Генерация ошибки
var err = new Error( "Oh, no way!" );
if( err instanceof Error ) {
//
}
Структура объекта
err -> {[Error]
'message': "Oh, no way!",
'name' : "Error",
'stack' : "at ..."
}
Базовые паттерны
● try/catch
● callback( err, result );
● EventEmitter.emit( 'error', ... );
process.on( 'uncaughtException', func );
+ Domain
Структура вызовов, пример
func01( callback )
func11( callback )
func21( callback )
func22( callback )
func12( callback )
func23( callback )
func31( callback )
func41( callback )
func51( callback )
func24( callback )
Существующие типы ошибок
● Error
● RangeError
● ReferenceError
● SyntaxError
● TypeError
● URIError
Облако СБИС
Чудо-облако
Управление диспетчерами
Одинаковая конфигурация
на всех диспетчерах!
Пулдиспетчеров
Управление диспетчерами (2)
...
M
B
DB replica
Архитектура узла
Masterprocess
Web Interface
RPC
API
Poller
Группы процессов Вызов метода в другом модуле
Код ошибки
Object.defineProperty(
Error.prototype,
'code',
{ value: -1, writable: true }
);
Ничто не предвещает беды...
Код ошибки (2)
var ERRORS = {
// Core errors
0x00000000: { name: 'UNKNOWN_ERROR', text: "Unknown error" },
// File system errors
0x00000100: { name: 'FS_UNKNOWN', parent: EFSError, text: "Unknown file system error" },
0x00000101: { name: 'FS_ENOENT' , parent: EFSError, text: "No such file or directory" },
0x00000103: { name: 'FS_EACCES' , parent: EFSError, text: "Permission denied" },
0x00000104: { name: 'FS_EMFILE' , parent: EFSError, text: "Too many open files" },
// Network errors
0x00000200: { name: 'NET_UNKNOWN', parent: ENetError, text: "Unknown network error" },
0x00000201: { name: 'NET_UNREACH', parent: ENetError, text: "Host is unreachable" },
0x00000202: { name: 'NET_REFUSED', parent: ENetError, text: "Connection refused" },
...
};
Object.defineProperties( Error.prototype, {
'isFsError' : { get: function() { return (this.code & 0xffffff00) == 0x00000100 } },
'isNetError': { get: function() { return (this.code & 0xffffff00) == 0x00000200 } },
'isDbError' : { get: function() { return (this.code & 0xffff0000) == 0x00010000 } },
...
});
Свои типы ошибок
global.ECustom = function ECustom( msg, … ) { … };
inherits( ECustom, Error );
ECustom.prototype.is = function is( compare_to ) { … };
ECustom.exportError = function exportError( err ) { … };
ECustom.importError = function importError( err ) { … };
ECustom
Свои типы ошибок (2)
● EBadFormat
● EFSError
● ENetError
● EDBError
● ETimeOut
● EEntExists
● ENoEnt
● EEntBadState
● EParseError
● EWrongValue
Создание и обработка ошибок
new EDBError( Error.DB_NOT_AUTHENTICATED )
new EEntExists( Error.DB_DUPLICATE_KEY )
new ENoEnt( "No worker found" )
new EWrongValue( "Handler not found" )
new ENetError( Error.NET_UNREACH )
new ENoEnt( Error.JSRPC_METHOD_NOT_FOUND )
if( (err instanceof ECustom) && err.is("config") ) { … }
if( err.is(EEntBadState) && err.is("cluster is off") ) { …
}
new ECustom([ "Config #%d for instance '%s' does not exists!", cfg_ver, inst.ident ])
Вопросы?

More Related Content

PPTX
Selenium: приемы работы
PPT
Подробная презентация JavaScript 6 в 1
PPTX
Павел Беликов, Как избежать ошибок, используя современный C++
PPTX
PHP basic
PPTX
Максим Щепелин. "Unittesting. Как?"
PPTX
Funny JS #1
PPTX
Григорий Демченко, Асинхронность и неблокирующая синхронизация
PDF
Devcamp nodejs-2010
Selenium: приемы работы
Подробная презентация JavaScript 6 в 1
Павел Беликов, Как избежать ошибок, используя современный C++
PHP basic
Максим Щепелин. "Unittesting. Как?"
Funny JS #1
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Devcamp nodejs-2010

What's hot (20)

PDF
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
PDF
Пластилиновый код: как перестать кодить и начать жить
PDF
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
PPTX
Аскетичная разработка браузера
PDF
Почему Mojolicious?
PDF
Decorators' recipes
PPTX
Григорий Демченко, Универсальный адаптер
PPTX
Selenium: начало работы
PPT
Collider
PDF
JPoint 2015 - Javassist на службе Java-разработчика
PPTX
Фитнес для вашего кода: как держать его в форме
PDF
Блоки, лямбды, замыкания
PDF
Parallel STL
PDF
Многопоточность в браузере. Модель акторов — Константин Крамлих
PPTX
Funny JS #2
PPTX
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
PDF
Догнать и перегнать boost::lexical_cast
PDF
Использование юнит-тестов для повышения качества разработки
PPTX
Владимир Горбенко «Использование блоков в Objective-C»
PDF
Erlang tasty & useful stuff
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
Пластилиновый код: как перестать кодить и начать жить
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
Аскетичная разработка браузера
Почему Mojolicious?
Decorators' recipes
Григорий Демченко, Универсальный адаптер
Selenium: начало работы
Collider
JPoint 2015 - Javassist на службе Java-разработчика
Фитнес для вашего кода: как держать его в форме
Блоки, лямбды, замыкания
Parallel STL
Многопоточность в браузере. Модель акторов — Константин Крамлих
Funny JS #2
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Догнать и перегнать boost::lexical_cast
Использование юнит-тестов для повышения качества разработки
Владимир Горбенко «Использование блоков в Objective-C»
Erlang tasty & useful stuff
Ad

Viewers also liked (20)

PDF
Общая модель аутентификации HTTP-сообщений на основе хэш- функций в веб-прил...
PDF
Модель распространения прав доступа Take-Grant
PDF
Метод машинного обучения для распознавания сгенерированных доменных имен
PDF
Разработка и реализация мандатного механизма управления доступом в СУБД MySQL...
PDF
Возможно, время не на твоей стороне. Реализация атаки по времени в браузере
PPTX
Yarfrontend #2. Useful services
PPTX
От 40 до 2 секунд
PPTX
Yarfrontend #2. Как мы делали гуя...
PDF
Разработка и реализация механизма мандатного управления доступом в СУБД MySQL...
PDF
О построении иерархического ролевого управления доступом (SibeCrypt 2012)
PDF
Общая модель аутентификации HTTP-сообщений на основе хэш-функций в веб-прилож...
PPTX
Медиавозможности HTML5. WebRTC
PPTX
ES6. Генераторы
PDF
Пишем Google Extensions. Начальный уровень
PDF
Облачные технологии и виртуализация
PDF
ZN27112015
PDF
Tessel. JavaScript на реальных устройствах.
PDF
General Method of HTTP Messages Authentication Based on Hash Functions in Web...
PDF
Development and Implementation of Mandatory Access Control Policy for RDBMS M...
PPTX
JavaScript-модули "из прошлого в будущее"
Общая модель аутентификации HTTP-сообщений на основе хэш- функций в веб-прил...
Модель распространения прав доступа Take-Grant
Метод машинного обучения для распознавания сгенерированных доменных имен
Разработка и реализация мандатного механизма управления доступом в СУБД MySQL...
Возможно, время не на твоей стороне. Реализация атаки по времени в браузере
Yarfrontend #2. Useful services
От 40 до 2 секунд
Yarfrontend #2. Как мы делали гуя...
Разработка и реализация механизма мандатного управления доступом в СУБД MySQL...
О построении иерархического ролевого управления доступом (SibeCrypt 2012)
Общая модель аутентификации HTTP-сообщений на основе хэш-функций в веб-прилож...
Медиавозможности HTML5. WebRTC
ES6. Генераторы
Пишем Google Extensions. Начальный уровень
Облачные технологии и виртуализация
ZN27112015
Tessel. JavaScript на реальных устройствах.
General Method of HTTP Messages Authentication Based on Hash Functions in Web...
Development and Implementation of Mandatory Access Control Policy for RDBMS M...
JavaScript-модули "из прошлого в будущее"
Ad

Similar to Нетривиальная обработка ошибок (20)

PPT
Подробная презентация JavaScript 6 в 1
PDF
Асинхронный JavaScript
PDF
Филипп Ковалев — Путь в npm
PDF
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
PPT
Web весна 2013 лекция 9
ODP
XML Magic
PPTX
Статический анализ кода
PPTX
статический анализ кода
PDF
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
PDF
DevConf. Дмитрий Сошников - ECMAScript 6
PDF
PVS-Studio в 2021 - Примеры ошибок
PDF
Transpile it.pdf
PDF
JavaScript. Async (in Russian)
PDF
Михаил Давыдов - JavaScript. Базовые знания
PDF
Михаил Давыдов - Транспорт, ajax
PDF
Михаил Давыдов — JavaScript: Базовые знания
PDF
Командная разработка “толстых клиентов”
PDF
Как выглядит современный фронтенд
PDF
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
PPT
PHP Tricks
Подробная презентация JavaScript 6 в 1
Асинхронный JavaScript
Филипп Ковалев — Путь в npm
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
Web весна 2013 лекция 9
XML Magic
Статический анализ кода
статический анализ кода
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
DevConf. Дмитрий Сошников - ECMAScript 6
PVS-Studio в 2021 - Примеры ошибок
Transpile it.pdf
JavaScript. Async (in Russian)
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - Транспорт, ajax
Михаил Давыдов — JavaScript: Базовые знания
Командная разработка “толстых клиентов”
Как выглядит современный фронтенд
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
PHP Tricks

Нетривиальная обработка ошибок