3. За что я люблю JavaScript?
• Очень удобно писать асинхронный код...
• JavaScript-код всегда исполняется в одном потоке
• Все "блокирующие" операции выполняются асинхронно
(в node.js это libuv)
• Благодаря Event Loop, не нужна синхронизация между потоками
(блокировки, каналы, вот это всё)
3
4. А зачем нам вообще асинхронный код?
• Для параллельной обработки большого набора данных
• Чтобы процесс не простаивал, пока исполняется длительная операция
• К сожалению, для первого JavaScript совсем не годится
• Зато всё круто со вторым...
4
11. Откуда они взялись?
• "Promise" 1976 год – Daniel P. Friedman и David Wise
"Функция, возвращающая будущее значение"
• "Future" 1977 год – Henry Baker и Carl Hewitt
"Представление будущего значения"
Статья Википедии
11
13. Откуда они взялись в JavaScript?
• Февраль 2010 Kris Kowal (Разработчик Q) предложил Promises/A
• 12 июня 2012 Brian Cavalier, Domenic Denicola и компания
предложили Promises/A+
• Спецификация Promises/A+, стала частью ECMAScript 6/2015
13
14. Важные факты
• jQuery Promise не соответствует спецификации
• Каждый Promise начинает исполнение на след. итерации Event Loop
• Каждый последующий .then() или .catch() тоже на след. итерации
14
15. Терминология
• Thenable – объект с методом .then (например jQuery Promise)
• Pending Promise – обещание ожидает значения
• Fulfilled Promise – выполненное обещание
• Rejected Promise – отвергнутое обещание
• Reason – описание, почему обещание отвергнуто
(обычно объект Error)
15