SlideShare a Scribd company logo
1 of 16
Нетривиальная
обработка ошибок
Презентацию подготовил
Сергей Яркин
Тензор, 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

What's hot

"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15MoscowJS
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15MoscowJS
 
Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузераPlatonov Sergey
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерSergey Platonov
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работыPaul Stashevsky
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаAnton Arhipov
 
Фитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеФитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеIlia Shishkov
 
Блоки, лямбды, замыкания
Блоки, лямбды, замыканияБлоки, лямбды, замыкания
Блоки, лямбды, замыканияDmitriy Kiriyenko
 
Многопоточность в браузере. Модель акторов — Константин Крамлих
Многопоточность в браузере. Модель акторов — Константин КрамлихМногопоточность в браузере. Модель акторов — Константин Крамлих
Многопоточность в браузере. Модель акторов — Константин КрамлихYandex
 
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work» Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work» LogeekNightUkraine
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castRoman Orlov
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
 
Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»e-Legion
 

What's hot (20)

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

Viewers also liked

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

Viewers also liked (20)

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

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

Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Филипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npmФилипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npmYandex
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)Ontico
 
Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9Technopark
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кодаAndrey Karpov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода Pavel Tsukanov
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6Dmitry Soshnikov
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокAndrey Karpov
 
Как программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуКак программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуAndreyGeonya
 
JavaScript. Async (in Russian)
JavaScript. Async (in Russian)JavaScript. Async (in Russian)
JavaScript. Async (in Russian)Mikhail Davydov
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияYandex
 
Михаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxМихаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxYandex
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияYandex
 
Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Open-IT
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтендTimophy Chaptykov
 
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис Речкунов#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис РечкуновJSib
 

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

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

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