ilyachalov (ilyachalov) wrote,
ilyachalov
ilyachalov

Categories:

Учебник по JavaScript: ч.1: Промисы, async/await

Прочел одиннадцатый раздел («Промисы, async/await») первой части («Язык программирования JavaScript») учебника по JavaScript.

https://learn.javascript.ru

Часть 1. Язык программирования JavaScript (в т.ч. 93 подраздела)

Разделы:

11. Промисы, async/await (8 подразделов)

11.1 Введение: колбэки
11.2 Промисы
11.3 Цепочка промисов
11.4 Промисы: обработка ошибок
11.5 Promise API
11.6 Промисификация
11.7 Микрозадачи
11.8 Async/await

По поводу названия этого раздела, названия первого подраздела 11.1 «Введение: колбэки» и содержимого первого подраздела я уже высказался в одном из предыдущих постов: Учебник по JavaScript: ч.1: Асинхронное программирование.

В разделе рассмотрены способы асинхронного программирования в языке JavaScript:

1) с помощью колбэков (от английского «callback», что по-русски в данном контексте означает «функция обратного вызова»): когда код, который нужно выполнить после некоей долгоиграющей задачи, передаётся в функцию, выполняющую эту долгоиграющую задачу, через параметр этой функции (об этом рассказано в подразделе 11.1 «Введение: колбэки»);

2) с помощью промисов (от английского «promise», что по-русски означает «обещание» или «обязательство»): долгоиграющий код («исполнитель») передается в функцию-конструктор промисов, которая создает объект («промис»), который принимает после выполнения долгоиграющего кода одно из двух состояний: либо «обязательство выполнено», либо «обязательство не выполнено из-за ошибки». Код («потребитель»), который нужно выполнить после долгоиграющего кода («исполнителя»), передается в один из трех методов объекта-промиса: then, catch или finally (об этом рассказано в подразделе 11.2 «Промисы»).

Второй способ (с помощью промисов) считается более прогрессивным, так как решает несколько проблем, появляющихся при применении первого способа (с помощью колбэков).

Перечисленные выше методы объекта-промиса тоже возвращают объект-промис. Поэтому можно создавать цепочки промисов через точку, таким образом реализуя последовательность асинхронных задач, которые должны быть выполнены одна за другой. Об этом рассказано в подразделе 11.3 «Цепочка промисов».

В подразделе 11.4 «Промисы: обработка ошибок» рассказано, как обрабатывать ошибки в промисах и цепочках промисов.

В подразделе 11.5 «Promise API» рассказано о статических методах класса Promise, а именно про методы Promise.all, Promise.allSettled, Promise.race, Promise.resolve и Promise.reject.

В англоязычной среде программисты используют существительное «Promisification» для обозначения процесса переделки функций с параметрами-колбэками (первый способ асинхронного программирования) в функции, возвращающие объект-промис (второй способ асинхронного программирования). На русский этот термин перевели как «Промисификация». Также программисты придумали специальные функции, которые автоматизируют промисификацию. Такой функции через ее параметр передается функция, которую требуется промисифицировать, после чего эта функция возвращает промисифицированную функцию. В качестве названия функции, автоматизирующей промисификацию, часто берут глагол «Promisify» (что по-русски означает «промисифицировать»). Об этом рассказано в подразделе 11.6 «Промисификация».

Подраздел 11.7 «Микрозадачи» учебника касается предусмотренной стандартом языка ECMAScript внутренней очереди выполнения задач, управляемых промисами (в терминах движка «V8» языка JavaScript эту очередь еще называют «очередью микрозадач», по-английски «microtask queue»). Это важно для понимания того, как асинхронный код сочетается с синхронным, что и в каком порядке выполняется.

В подразделе 11.8 «Async/await» рассказано про специальный синтаксис для работы с промисами, при котором используются ключевые слова async и await. С точки зрения синтаксиса это можно назвать третьим способом асинхронного программирования в языке JavaScript, хотя при нем, на самом деле, используются те же промисы. С помощью этого синтаксиса можно значительно улучшить читабельность и понятность скрипта по сравнению с использованием синтаксиса объектов-промисов.

В целом раздел «Промисы, async/await» — довольно сложный для понимания раздел учебника, к которому, я думаю, мне еще придется неоднократно возвращаться.
Tags: Образование, Программирование
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments