SlideShare a Scribd company logo
1 of 21
Download to read offline
Confidential. All rights reserved. Valtech Solutions, Inc.
Возможности ES-2015 (Promise, Генераторы)
v.0.1
Кулаков Алексей
2014 – Senior SFCC developer,
Valtech Ukraine
8+ years in Web development
SPEAKER INFO
Skype: alexeyvk9
01. Зачем нам Promise
02. Что такое Promise
03. Промисификация
04. Цепочки Promise
05. Генераторы
06. Где работает
07. Спасибо
"callback hell"
The Pyramid of Doom
registerUser(function(user) {
sendActivationMail(function(user) {
addNewUser(function(user) {
notifyMarketingToStartTheSpam(function(user) {
showThankYouPage(user);
});
});
});
});
То же самое при помощи Promise
registerUser.
then(sendActivationEmail).
then(provisionToLegacySystem).
then(notifyMarketingToStartTheSpam).
then(showThankYouPage);
Фактически промисы позволяют нам писать асинхронный код - синхронно
Promise – это специальный объект, который
содержит своё состояние.
Вначале pending («ожидание»), затем – одно
из: fulfilled («выполнено успешно»)
или rejected («выполнено с ошибкой»).
Promise
(pending)
Promise
(fulfilled)
Promise
(rejected)
resolve()
reject()
Объект «обещание» создается с помощью
конструктора new Promise(...), которому в качестве
аргумента передается анонимная функция с двумя
параметрами: resolve, reject. Они, в свою очередь,
так же являются функциями.
resolve() — сообщает о том, что код выполнен
«успешно», reject() – код выполнен с «ошибкой»
Простой пример Promise. Промисификация
Синхронный throw – то же самое, что reject
Если в функции промиса происходит синхронный throw (или иная ошибка), то вызывается
reject:
Метод для навешивания обработчиков промисов
promise.then(onFulfilled, onRejected)
• onFulfilled – функция, которая будет вызвана с
результатом при resolve.
• onRejected – функция, которая будет вызвана с ошибкой
при reject.
Для обработчика ошибок, вместо .then(null, onRejected)
можно написать .catch(onRejected) – это то же самое.
9/18/2017 11
Использование then() и catch()
Цепочки промисов
Цепочки промисов
Initial
task
Success
task1
Success
task2
Failure
task
.then() .then()
.catch()
Цепочки промисов
Параллельное выполнение Promise.all
Promise.all(iterable) получает массив (или другой итерируемый объект) промисов и возвраща
ет промис, который ждёт, пока все переданные промисы завершатся,
и переходит в состояние «выполнено» с массивом их результатов.
Параллельное выполнение Promise.race
Promise.race(iterable) получает итерируемый объект с промисами, которые нужно
выполнить, и возвращает новый промис.
В отличие от Promise.all, результатом будет только первый успешно выполнившийся
промис из списка. Остальные игнорируются.
Генераторы – новый вид функций в
современном JavaScript. Они отличаются от
обычных тем, что могут приостанавливать
своё выполнение, возвращать промежуточный
результат и далее возобновлять его позже,
в произвольный момент времени.
9/18/2017 18
Совместимость
Все современные браузеры поддерживают использование
Promise.
IE11 :(
• ES5 + Bluebird
• Babel: ES6 => ES5
• Промис – это специальный объект, который хранит своё состояние,
текущий результат (если есть) и коллбэки.
• При создании new Promise(function (resolve, reject) {…})
автоматически запускается функция-аргумент, которая должна
вызвать resolve(result) при успешном выполнении и reject(error) –
при ошибке.
• Аргумент resolve/reject (только первый, остальные игнорируются)
передаётся обработчикам на этом промисе.
• Обработчики назначаются вызовом .then/.catch
• Для передачи результата от одного обработчика к другому
используется чейнинг.
Итоги
thank you

More Related Content

What's hot

Async Javascript
Async JavascriptAsync Javascript
Async JavascriptGetDev.NET
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesTMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesIosif Itkin
 
Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Noveo
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Прессit-people
 
Android - 09 - Fragments
Android - 09 - FragmentsAndroid - 09 - Fragments
Android - 09 - FragmentsNoveo
 
Ilia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийIlia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийrit2010
 
Тестовая инфраструктура в облаке
Тестовая инфраструктура в облакеТестовая инфраструктура в облаке
Тестовая инфраструктура в облакеSQALab
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersAleksey Fomkin
 
Using redux in Angular applications
Using redux in Angular applicationsUsing redux in Angular applications
Using redux in Angular applicationsAnastasiia Nedbailo
 
Elena Morgun Gil in different programming languages
Elena Morgun	Gil in different programming languagesElena Morgun	Gil in different programming languages
Elena Morgun Gil in different programming languagesАліна Шепшелей
 
Обзор Linux Control Groups
Обзор Linux Control GroupsОбзор Linux Control Groups
Обзор Linux Control GroupsOSLL
 
Pundle для менджемента зависимостей в python проектах
Pundle для менджемента зависимостей в python проектахPundle для менджемента зависимостей в python проектах
Pundle для менджемента зависимостей в python проектахMikhail Krivushin
 

What's hot (18)

Async Javascript
Async JavascriptAsync Javascript
Async Javascript
 
Java. Циклы.
Java. Циклы.Java. Циклы.
Java. Циклы.
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesTMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
 
transaction. php
transaction. phptransaction. php
transaction. php
 
Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)
 
Lec 14
Lec 14Lec 14
Lec 14
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Пресс
 
Android - 09 - Fragments
Android - 09 - FragmentsAndroid - 09 - Fragments
Android - 09 - Fragments
 
Ilia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийIlia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решений
 
Тестовая инфраструктура в облаке
Тестовая инфраструктура в облакеТестовая инфраструктура в облаке
Тестовая инфраструктура в облаке
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
Using redux in Angular applications
Using redux in Angular applicationsUsing redux in Angular applications
Using redux in Angular applications
 
WhileRepeat
WhileRepeatWhileRepeat
WhileRepeat
 
Mercurial vs Svn
Mercurial vs SvnMercurial vs Svn
Mercurial vs Svn
 
Elena Morgun Gil in different programming languages
Elena Morgun	Gil in different programming languagesElena Morgun	Gil in different programming languages
Elena Morgun Gil in different programming languages
 
Обзор Linux Control Groups
Обзор Linux Control GroupsОбзор Linux Control Groups
Обзор Linux Control Groups
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
Pundle для менджемента зависимостей в python проектах
Pundle для менджемента зависимостей в python проектахPundle для менджемента зависимостей в python проектах
Pundle для менджемента зависимостей в python проектах
 

Similar to Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)

Жизнь после promises
Жизнь после promisesЖизнь после promises
Жизнь после promisesVitebsk DSC
 
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
#7 "Многообещающий JavaScript – Promises" Денис Речкунов#7 "Многообещающий JavaScript – Promises" Денис Речкунов
#7 "Многообещающий JavaScript – Promises" Денис РечкуновJSib
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: PromisesRAMBLER&Co
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Noveo
 
JavaScript. Асинхронное программирование. Promise & Deferred
JavaScript. Асинхронное программирование. Promise & DeferredJavaScript. Асинхронное программирование. Promise & Deferred
JavaScript. Асинхронное программирование. Promise & Deferreddokhrimenko
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CYandex
 
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.jsTrainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.jsDevOWL Meetup
 
Selenium, а давай подождем?
Selenium, а давай подождем?Selenium, а давай подождем?
Selenium, а давай подождем?SQALab
 
Продвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевYandex
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentationIvan Filimonov
 
JavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиGetDev.NET
 
04 ос взаимодействие_процессов_1
04 ос взаимодействие_процессов_104 ос взаимодействие_процессов_1
04 ос взаимодействие_процессов_1921519
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаAnton Arhipov
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
CodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
CodeFest 2014. Гайдаренко О. — Промисы и jQuery ПромисыCodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
CodeFest 2014. Гайдаренко О. — Промисы и jQuery ПромисыCodeFest
 
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Denis Tsvettsih
 
Java осень 2012 лекция 5
Java осень 2012 лекция 5Java осень 2012 лекция 5
Java осень 2012 лекция 5Technopark
 
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехникиCodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехникиCodeFest
 

Similar to Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy) (20)

Жизнь после promises
Жизнь после promisesЖизнь после promises
Жизнь после promises
 
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
#7 "Многообещающий JavaScript – Promises" Денис Речкунов#7 "Многообещающий JavaScript – Promises" Денис Речкунов
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: Promises
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
JavaScript. Асинхронное программирование. Promise & Deferred
JavaScript. Асинхронное программирование. Promise & DeferredJavaScript. Асинхронное программирование. Promise & Deferred
JavaScript. Асинхронное программирование. Promise & Deferred
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.jsTrainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
 
Selenium, а давай подождем?
Selenium, а давай подождем?Selenium, а давай подождем?
Selenium, а давай подождем?
 
Продвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр Кошелев
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 
JavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработки
 
04 ос взаимодействие_процессов_1
04 ос взаимодействие_процессов_104 ос взаимодействие_процессов_1
04 ос взаимодействие_процессов_1
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
CodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
CodeFest 2014. Гайдаренко О. — Промисы и jQuery ПромисыCodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
CodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
 
Step 7
Step 7Step 7
Step 7
 
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
 
Java осень 2012 лекция 5
Java осень 2012 лекция 5Java осень 2012 лекция 5
Java осень 2012 лекция 5
 
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехникиCodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
 

More from Web Tech Fun

Yevtushenko Alex - Microservices platform: transformation of Monolith.
Yevtushenko Alex - Microservices platform: transformation of Monolith.Yevtushenko Alex - Microservices platform: transformation of Monolith.
Yevtushenko Alex - Microservices platform: transformation of Monolith.Web Tech Fun
 
Taras Slipets - Full-stack, Full-run, Full-test: pain reduction in practice
Taras Slipets - Full-stack, Full-run, Full-test: pain reduction in practiceTaras Slipets - Full-stack, Full-run, Full-test: pain reduction in practice
Taras Slipets - Full-stack, Full-run, Full-test: pain reduction in practiceWeb Tech Fun
 
Oleksandr Khotemskyi - Serverless architecture and how to apply it in Automa...
Oleksandr Khotemskyi  - Serverless architecture and how to apply it in Automa...Oleksandr Khotemskyi  - Serverless architecture and how to apply it in Automa...
Oleksandr Khotemskyi - Serverless architecture and how to apply it in Automa...Web Tech Fun
 
Denys iaremenko - Automation for mobile applications: WHYs and HOWs.
Denys iaremenko - Automation for mobile applications: WHYs and HOWs.Denys iaremenko - Automation for mobile applications: WHYs and HOWs.
Denys iaremenko - Automation for mobile applications: WHYs and HOWs.Web Tech Fun
 
Богдан Отводенко - Модульные сетки без хаков CSS Grid Layout
Богдан Отводенко - Модульные сетки без хаков CSS Grid LayoutБогдан Отводенко - Модульные сетки без хаков CSS Grid Layout
Богдан Отводенко - Модульные сетки без хаков CSS Grid LayoutWeb Tech Fun
 
Владимир Логвинов - Rest-Assured - легкий способ автоматизации тестирования REST
Владимир Логвинов - Rest-Assured - легкий способ автоматизации тестирования RESTВладимир Логвинов - Rest-Assured - легкий способ автоматизации тестирования REST
Владимир Логвинов - Rest-Assured - легкий способ автоматизации тестирования RESTWeb Tech Fun
 
Евгений Самоненко - Практическая оптимизация сервер сайд современные реалии
Евгений Самоненко - Практическая оптимизация сервер сайд современные реалииЕвгений Самоненко - Практическая оптимизация сервер сайд современные реалии
Евгений Самоненко - Практическая оптимизация сервер сайд современные реалииWeb Tech Fun
 
Антон Немцев - Что нам стоит дом построить
Антон Немцев - Что нам стоит дом построитьАнтон Немцев - Что нам стоит дом построить
Антон Немцев - Что нам стоит дом построитьWeb Tech Fun
 
Александр Бадзым - CSS Переменные — настало ваше время!
Александр Бадзым - CSS Переменные — настало ваше время!Александр Бадзым - CSS Переменные — настало ваше время!
Александр Бадзым - CSS Переменные — настало ваше время!Web Tech Fun
 
Axel Nordfeldt (Beetroot Academy) - IT as a social instrument
Axel Nordfeldt (Beetroot Academy) - IT as a social instrumentAxel Nordfeldt (Beetroot Academy) - IT as a social instrument
Axel Nordfeldt (Beetroot Academy) - IT as a social instrumentWeb Tech Fun
 

More from Web Tech Fun (10)

Yevtushenko Alex - Microservices platform: transformation of Monolith.
Yevtushenko Alex - Microservices platform: transformation of Monolith.Yevtushenko Alex - Microservices platform: transformation of Monolith.
Yevtushenko Alex - Microservices platform: transformation of Monolith.
 
Taras Slipets - Full-stack, Full-run, Full-test: pain reduction in practice
Taras Slipets - Full-stack, Full-run, Full-test: pain reduction in practiceTaras Slipets - Full-stack, Full-run, Full-test: pain reduction in practice
Taras Slipets - Full-stack, Full-run, Full-test: pain reduction in practice
 
Oleksandr Khotemskyi - Serverless architecture and how to apply it in Automa...
Oleksandr Khotemskyi  - Serverless architecture and how to apply it in Automa...Oleksandr Khotemskyi  - Serverless architecture and how to apply it in Automa...
Oleksandr Khotemskyi - Serverless architecture and how to apply it in Automa...
 
Denys iaremenko - Automation for mobile applications: WHYs and HOWs.
Denys iaremenko - Automation for mobile applications: WHYs and HOWs.Denys iaremenko - Automation for mobile applications: WHYs and HOWs.
Denys iaremenko - Automation for mobile applications: WHYs and HOWs.
 
Богдан Отводенко - Модульные сетки без хаков CSS Grid Layout
Богдан Отводенко - Модульные сетки без хаков CSS Grid LayoutБогдан Отводенко - Модульные сетки без хаков CSS Grid Layout
Богдан Отводенко - Модульные сетки без хаков CSS Grid Layout
 
Владимир Логвинов - Rest-Assured - легкий способ автоматизации тестирования REST
Владимир Логвинов - Rest-Assured - легкий способ автоматизации тестирования RESTВладимир Логвинов - Rest-Assured - легкий способ автоматизации тестирования REST
Владимир Логвинов - Rest-Assured - легкий способ автоматизации тестирования REST
 
Евгений Самоненко - Практическая оптимизация сервер сайд современные реалии
Евгений Самоненко - Практическая оптимизация сервер сайд современные реалииЕвгений Самоненко - Практическая оптимизация сервер сайд современные реалии
Евгений Самоненко - Практическая оптимизация сервер сайд современные реалии
 
Антон Немцев - Что нам стоит дом построить
Антон Немцев - Что нам стоит дом построитьАнтон Немцев - Что нам стоит дом построить
Антон Немцев - Что нам стоит дом построить
 
Александр Бадзым - CSS Переменные — настало ваше время!
Александр Бадзым - CSS Переменные — настало ваше время!Александр Бадзым - CSS Переменные — настало ваше время!
Александр Бадзым - CSS Переменные — настало ваше время!
 
Axel Nordfeldt (Beetroot Academy) - IT as a social instrument
Axel Nordfeldt (Beetroot Academy) - IT as a social instrumentAxel Nordfeldt (Beetroot Academy) - IT as a social instrument
Axel Nordfeldt (Beetroot Academy) - IT as a social instrument
 

Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)

  • 1. Confidential. All rights reserved. Valtech Solutions, Inc. Возможности ES-2015 (Promise, Генераторы) v.0.1
  • 2. Кулаков Алексей 2014 – Senior SFCC developer, Valtech Ukraine 8+ years in Web development SPEAKER INFO Skype: alexeyvk9
  • 3. 01. Зачем нам Promise 02. Что такое Promise 03. Промисификация 04. Цепочки Promise 05. Генераторы 06. Где работает 07. Спасибо
  • 4. "callback hell" The Pyramid of Doom registerUser(function(user) { sendActivationMail(function(user) { addNewUser(function(user) { notifyMarketingToStartTheSpam(function(user) { showThankYouPage(user); }); }); }); });
  • 5. То же самое при помощи Promise registerUser. then(sendActivationEmail). then(provisionToLegacySystem). then(notifyMarketingToStartTheSpam). then(showThankYouPage); Фактически промисы позволяют нам писать асинхронный код - синхронно
  • 6. Promise – это специальный объект, который содержит своё состояние. Вначале pending («ожидание»), затем – одно из: fulfilled («выполнено успешно») или rejected («выполнено с ошибкой»).
  • 8. Объект «обещание» создается с помощью конструктора new Promise(...), которому в качестве аргумента передается анонимная функция с двумя параметрами: resolve, reject. Они, в свою очередь, так же являются функциями. resolve() — сообщает о том, что код выполнен «успешно», reject() – код выполнен с «ошибкой»
  • 9. Простой пример Promise. Промисификация
  • 10. Синхронный throw – то же самое, что reject Если в функции промиса происходит синхронный throw (или иная ошибка), то вызывается reject:
  • 11. Метод для навешивания обработчиков промисов promise.then(onFulfilled, onRejected) • onFulfilled – функция, которая будет вызвана с результатом при resolve. • onRejected – функция, которая будет вызвана с ошибкой при reject. Для обработчика ошибок, вместо .then(null, onRejected) можно написать .catch(onRejected) – это то же самое. 9/18/2017 11
  • 16. Параллельное выполнение Promise.all Promise.all(iterable) получает массив (или другой итерируемый объект) промисов и возвраща ет промис, который ждёт, пока все переданные промисы завершатся, и переходит в состояние «выполнено» с массивом их результатов.
  • 17. Параллельное выполнение Promise.race Promise.race(iterable) получает итерируемый объект с промисами, которые нужно выполнить, и возвращает новый промис. В отличие от Promise.all, результатом будет только первый успешно выполнившийся промис из списка. Остальные игнорируются.
  • 18. Генераторы – новый вид функций в современном JavaScript. Они отличаются от обычных тем, что могут приостанавливать своё выполнение, возвращать промежуточный результат и далее возобновлять его позже, в произвольный момент времени. 9/18/2017 18
  • 19. Совместимость Все современные браузеры поддерживают использование Promise. IE11 :( • ES5 + Bluebird • Babel: ES6 => ES5
  • 20. • Промис – это специальный объект, который хранит своё состояние, текущий результат (если есть) и коллбэки. • При создании new Promise(function (resolve, reject) {…}) автоматически запускается функция-аргумент, которая должна вызвать resolve(result) при успешном выполнении и reject(error) – при ошибке. • Аргумент resolve/reject (только первый, остальные игнорируются) передаётся обработчикам на этом промисе. • Обработчики назначаются вызовом .then/.catch • Для передачи результата от одного обработчика к другому используется чейнинг. Итоги