SlideShare a Scribd company logo
1 of 30
Download to read offline
Жизнь после Promises
Алексей Бельский
Ведущий разработчик,
в <EPAM> с 2011
Обо мне
Callback
‘95 ‘11 ‘15
Promise
(jQuery)
Generator
Async/Await
Эволюция взаимодействия с асинхронным кодом.
Том 1
Асинхронность в Javascript
Callback. Начало
10
setTimeout(callback, 1000)
Самый простой пример использования функции обратного вызова
“Пирамида зла”
getData(function(a){
getMoreData(a, function(b){
getMoreData(b, function(c){
getMoreData(c, function(d){
getMoreData(d, function(e){
...
});
});
});
});
});
Эра Promises11
“
Promise -это объект для
асинхронных манипуляций.
Представляет собой
асинхронную операцию, которая
еще не закончена, но это
предполагается в будущем.
Mozilla Developer Network
“
Так выглядит стандартная
цепочка “промисов”
var req = new Promise(function(resolve, reject) {
setTimeout(function() {
if ( … ) {
resolve({status: 'OK'});
} else {
reject({status: 'Not OK :('});
}
}, 1000);
})
.then(fetchSomething)
.then(sendSomething)
.catch(handleError)
.then(finalize);
Promise изнутри
├[[PromiseStatus]]:"resolved"
├[[PromiseValue]]:"It’s OK!"
├__proto__:Promise
└─┐
├catch:catch()
├constructor:Promise()
└then:then()
Три группы Promise API
.then() / .catch()
Отвечают за цепочки Promise.
аргумент: Функция
.resolve() / .reject()
Решают, когда нужно запустить цепочки Promise
аргумент: что угодно
.race() / .all()
Предоставляют возможность работать с несколькими
асинхронными запросами одновременно
аргумент: массив из Promise
Проблема новичка
Где моё значение?
Ожидание - результат
function fetch(login, pass) {
// Выполняет асинхронный запрос с помощью Promises
return query();
}
var result = fetch();
// Ожидание: result === {data: [ … ]}
// Фактический результат: login === Promise
1
Не нравится? Есть варианты!
◉ Продолжать использовать Callbacks;
◉ Понять, как правильно пользоваться Promises;
◉ Воспользоваться Generators;
◉ Воспользоваться Async/Await.
Generators
В поисках идеального синтаксиса
12
function*
Перемен требуют наши сердца. Определение Generator.
1. generator.next(); // продолжает Generator
2. generator.return(); // останавливает Generator
3. generator.throw(exception); // вызывает исключение
Всегда возвращают объект с двумя значениями:
{
done: [Boolean],
value: [Object]
}
Методы Generator:
var result = yield auth();
1. yield возвращает Promise;
2. (что-то в середине) отлавливает Promise;
3. (что-то в середине) вызывает метод .next со
значением, которое Promise получает;
4. переменная result записывается со значением из
Promise;
Поставь код на паузу
Каждый раз, когда вы захотите
остановить выполнение кода в
определенной точке - просто
вызовите yield. Это мощный
механизм для разделения
логики на шаги.
Generator может быть
асинхронным
Нужно сделать асинхронный запрос?
Прекрасно! С помощью небольшой
надстройки реально использовать
Generator таким образом, что
значение будет возвращено, как
только запрос будет закончен.
Важные моменты
async(function* () {
var result = yield auth('login', 'password');
if (result.status === 'OK') {
success('login');
}
})
Как это работает
Не терпится
попробовать?
49
4
13
45
36
10
Async/Await
“Dreamed of para-para-paradise?” © Coldplay
13
ключевое слово async
Определение асинхронной
функции, что возвращает
Promise. Внутри этой
функции, возможно
подключить другие
асинхронные операции
используя await.
ключевое слово await
Может быть использовано
только внутри асинхронных
функций. Работают подобно
генераторам, придерживая
выполнение в контексте пока
Promise работает. Если
ожидаемое выражение не
Promise, оно будет в него
превращено.
Синтаксис
async function init() {
var info = await fetchSomething();
var result = await sendSomething(info);
return result;
}
Что вернет функция “init”?
async function init() {
var info = await fetchSomething();
var result = await sendSomething(info);
return result;
}
Что вернет функция “init”?
Promise!
◉ Ваш код станет линейным;
◉ Синтаксис будет проще;
◉ Вы даже можете использовать try/catch чтобы отловить
ошибку;
… Однако асинхронные функции возвращают Promise, а не
фактическое значение, так что вам все равно нужно знать,
как работают Promises.
Итог
Когда я могу это
использовать?
55
7
42
Есть вопросы?
Меня можно найти в
◉ Twitter: @alxblsk
◉ Facebook: @alxblsk
Спасибо!

More Related Content

What's hot

Современные возможности ES-2015 (Promise, Generators, Proxy).
Современные возможности ES-2015 (Promise, Generators, Proxy).Современные возможности ES-2015 (Promise, Generators, Proxy).
Современные возможности ES-2015 (Promise, Generators, Proxy).Valtech Ukraine
 
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)Web Tech Fun
 
#13 "Управление состоянием в Redux" Роман Сальников
#13 "Управление состоянием в Redux" Роман Сальников#13 "Управление состоянием в Redux" Роман Сальников
#13 "Управление состоянием в Redux" Роман СальниковJSib
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерSergey Platonov
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​FDConf
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтендTimophy Chaptykov
 
Android осень 2013 лекция 4
Android осень 2013 лекция 4Android осень 2013 лекция 4
Android осень 2013 лекция 4Technopark
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис РечкуновDevDay
 
Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузераPlatonov Sergey
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: PromisesRAMBLER&Co
 
Фитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеФитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеIlia Shishkov
 
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"Fwdays
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работыPaul Stashevsky
 
Изоморфный JavaScript (iForum 2015)
Изоморфный JavaScript (iForum 2015)Изоморфный JavaScript (iForum 2015)
Изоморфный JavaScript (iForum 2015)Max Klymyshyn
 
DI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыDI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыPlatonov Sergey
 

What's hot (20)

Современные возможности ES-2015 (Promise, Generators, Proxy).
Современные возможности ES-2015 (Promise, Generators, Proxy).Современные возможности ES-2015 (Promise, Generators, Proxy).
Современные возможности ES-2015 (Promise, Generators, Proxy).
 
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)
 
Parallel STL
Parallel STLParallel STL
Parallel STL
 
#13 "Управление состоянием в Redux" Роман Сальников
#13 "Управление состоянием в Redux" Роман Сальников#13 "Управление состоянием в Redux" Роман Сальников
#13 "Управление состоянием в Redux" Роман Сальников
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптер
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтенд
 
Android осень 2013 лекция 4
Android осень 2013 лекция 4Android осень 2013 лекция 4
Android осень 2013 лекция 4
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
Rac
RacRac
Rac
 
Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузера
 
Zend framework 2
Zend framework 2Zend framework 2
Zend framework 2
 
C++ exceptions
C++ exceptionsC++ exceptions
C++ exceptions
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: Promises
 
Фитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеФитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в форме
 
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работы
 
Изоморфный JavaScript (iForum 2015)
Изоморфный JavaScript (iForum 2015)Изоморфный JavaScript (iForum 2015)
Изоморфный JavaScript (iForum 2015)
 
DI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыDI в C++ тонкости и нюансы
DI в C++ тонкости и нюансы
 

Similar to Жизнь после promises

FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentationIvan Filimonov
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
Wild Async .NET world: AID Kit for boy-scouts
Wild Async .NET world: AID Kit for boy-scoutsWild Async .NET world: AID Kit for boy-scouts
Wild Async .NET world: AID Kit for boy-scoutsHYS Enterprise
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.Igor Shkulipa
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Alex Tumanoff
 
JavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиGetDev.NET
 
Async Javascript
Async JavascriptAsync Javascript
Async JavascriptGetDev.NET
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverIgor Khrol
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работыPaul Stashevsky
 
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Sigma Software
 
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Denis Tsvettsih
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0akrakovetsky
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
MVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяMVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяYuri Shmakov
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15MoscowJS
 

Similar to Жизнь после promises (20)

FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Wild Async .NET world: AID Kit for boy-scouts
Wild Async .NET world: AID Kit for boy-scoutsWild Async .NET world: AID Kit for boy-scouts
Wild Async .NET world: AID Kit for boy-scouts
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2
 
JavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработки
 
Async Javascript
Async JavascriptAsync Javascript
Async Javascript
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работы
 
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
 
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
MVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяMVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоваться
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
 
Android service
Android serviceAndroid service
Android service
 

More from Vitebsk DSC

How to exceed Customer's expectations by delivery complicated ML+RPA project
How to exceed Customer's expectations by delivery complicated ML+RPA projectHow to exceed Customer's expectations by delivery complicated ML+RPA project
How to exceed Customer's expectations by delivery complicated ML+RPA projectVitebsk DSC
 
Аджайл майндсет. Что разрушает вашу команду?
Аджайл майндсет. Что разрушает вашу команду?Аджайл майндсет. Что разрушает вашу команду?
Аджайл майндсет. Что разрушает вашу команду?Vitebsk DSC
 
Микросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring CloudМикросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring CloudVitebsk DSC
 
Тестирование больших данных
Тестирование больших данныхТестирование больших данных
Тестирование больших данныхVitebsk DSC
 
Amazon SQS или не все костыли одинаково бесполезны
Amazon SQS или не все костыли одинаково бесполезныAmazon SQS или не все костыли одинаково бесполезны
Amazon SQS или не все костыли одинаково бесполезныVitebsk DSC
 
Amazon Athena overview
Amazon Athena overviewAmazon Athena overview
Amazon Athena overviewVitebsk DSC
 
Typical BA Mistakes ​in documentation
Typical BA Mistakes ​in documentationTypical BA Mistakes ​in documentation
Typical BA Mistakes ​in documentationVitebsk DSC
 
На пути к совершенному инжинирингу
На пути к совершенному инжинирингуНа пути к совершенному инжинирингу
На пути к совершенному инжинирингуVitebsk DSC
 
Чего же ты хочешь, человек?
Чего же ты хочешь, человек?Чего же ты хочешь, человек?
Чего же ты хочешь, человек?Vitebsk DSC
 
Растем вместе с eKIDS
Растем вместе с eKIDSРастем вместе с eKIDS
Растем вместе с eKIDSVitebsk DSC
 
Технологии беспилотных автомобилей
Технологии беспилотных автомобилейТехнологии беспилотных автомобилей
Технологии беспилотных автомобилейVitebsk DSC
 
Оптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильноОптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильноVitebsk DSC
 
Управляем эволюцией на лету
Управляем эволюцией на летуУправляем эволюцией на лету
Управляем эволюцией на летуVitebsk DSC
 
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчейVitebsk DSC
 
Reactive programming для успеха вашего стартапа
Reactive programming для успеха вашего стартапаReactive programming для успеха вашего стартапа
Reactive programming для успеха вашего стартапаVitebsk DSC
 
Экстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverЭкстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverVitebsk DSC
 
Проблемы с производительностью приложений на AngularJS и способы их решения
Проблемы с производительностью приложений на AngularJS и способы их решенияПроблемы с производительностью приложений на AngularJS и способы их решения
Проблемы с производительностью приложений на AngularJS и способы их решенияVitebsk DSC
 
Микросервисы на практике
Микросервисы на практикеМикросервисы на практике
Микросервисы на практикеVitebsk DSC
 

More from Vitebsk DSC (20)

Community-Z
Community-ZCommunity-Z
Community-Z
 
How to exceed Customer's expectations by delivery complicated ML+RPA project
How to exceed Customer's expectations by delivery complicated ML+RPA projectHow to exceed Customer's expectations by delivery complicated ML+RPA project
How to exceed Customer's expectations by delivery complicated ML+RPA project
 
Аджайл майндсет. Что разрушает вашу команду?
Аджайл майндсет. Что разрушает вашу команду?Аджайл майндсет. Что разрушает вашу команду?
Аджайл майндсет. Что разрушает вашу команду?
 
Микросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring CloudМикросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring Cloud
 
Тестирование больших данных
Тестирование больших данныхТестирование больших данных
Тестирование больших данных
 
Amazon SQS или не все костыли одинаково бесполезны
Amazon SQS или не все костыли одинаково бесполезныAmazon SQS или не все костыли одинаково бесполезны
Amazon SQS или не все костыли одинаково бесполезны
 
Amazon Athena overview
Amazon Athena overviewAmazon Athena overview
Amazon Athena overview
 
Typical BA Mistakes ​in documentation
Typical BA Mistakes ​in documentationTypical BA Mistakes ​in documentation
Typical BA Mistakes ​in documentation
 
Boring is Fun!
Boring is Fun!Boring is Fun!
Boring is Fun!
 
На пути к совершенному инжинирингу
На пути к совершенному инжинирингуНа пути к совершенному инжинирингу
На пути к совершенному инжинирингу
 
Чего же ты хочешь, человек?
Чего же ты хочешь, человек?Чего же ты хочешь, человек?
Чего же ты хочешь, человек?
 
Растем вместе с eKIDS
Растем вместе с eKIDSРастем вместе с eKIDS
Растем вместе с eKIDS
 
Технологии беспилотных автомобилей
Технологии беспилотных автомобилейТехнологии беспилотных автомобилей
Технологии беспилотных автомобилей
 
Оптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильноОптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильно
 
Управляем эволюцией на лету
Управляем эволюцией на летуУправляем эволюцией на лету
Управляем эволюцией на лету
 
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчей
 
Reactive programming для успеха вашего стартапа
Reactive programming для успеха вашего стартапаReactive programming для успеха вашего стартапа
Reactive programming для успеха вашего стартапа
 
Экстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverЭкстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java Driver
 
Проблемы с производительностью приложений на AngularJS и способы их решения
Проблемы с производительностью приложений на AngularJS и способы их решенияПроблемы с производительностью приложений на AngularJS и способы их решения
Проблемы с производительностью приложений на AngularJS и способы их решения
 
Микросервисы на практике
Микросервисы на практикеМикросервисы на практике
Микросервисы на практике
 

Жизнь после promises