Асинхронность в JS презентация

Содержание

Слайд 2

Ад коллбэков (callback hell)

Для обеспечения возможности общения клиента с серверами используются AJAX (от

англ. "Asynchronous JavaScript and XML”) запросы.
До появления промисов и async/await использовались конструкции XMLHttpRequest, главный минус которых заключался в том, что при наличии зависимости одного запроса от предыдущего создавалась пирамидальная структура запросов вследствие обработки каждого нового запроса в коллбэке, образуя таким образом множественность вложенных коллбэков.

Ад коллбэков (callback hell) Для обеспечения возможности общения клиента с серверами используются AJAX

Слайд 3

Ад коллбэков можно узнать по формированию “пирамидки” по вертикальной оси кода.

Для того, чтобы

сделать структуру запросов “плоской” (убрать вложенность) была внедрена конструкция промисов.

Но перед разбором AJAX-запросов с использованием промисов рассмотрим работу рантайма JS, в частности - Event Loop.

Ад коллбэков можно узнать по формированию “пирамидки” по вертикальной оси кода. Для того,

Слайд 4

Рантайм JS в браузере

Движок JS

Куча

Стек

Web APIs

click

fetch

timeout

geolocation

и другие

Очередь

load

timer

Цикл событий

Выполнение кода, примитивные данные

Хранение референсов (объекты,

функции)

Рантайм JS в браузере Движок JS Куча Стек Web APIs click fetch timeout

Слайд 5

Event Loop

Стек

Глобальный контекст

Очередь микротасок

Web APIs

1

2

3

4

5

6

7

8

9

Очередь макротасок

Event Loop Стек Глобальный контекст Очередь микротасок Web APIs 1 2 3 4

Слайд 6

Промисы: понятие и синтаксис

Промис - это особый объект, используемый в качестве плейсхолдера для

будущего значения завершенной асинхронной операции.

Понятие

Синтаксис

Промис - это контейнер для будущего значения (не установленного на настоящий момент)

Промисы: понятие и синтаксис Промис - это особый объект, используемый в качестве плейсхолдера

Слайд 7

Промисы: пример

Промисы: пример

Слайд 8

Возможные состояния промиса

Pending

Settled

Fulfilled

Rejected

Из состояния Settled в другое промис может перейти только единожды. Все

попытки изменить состояние промиса после первого изменения будут проигнорированы.

Возможные состояния промиса Pending Settled Fulfilled Rejected Из состояния Settled в другое промис

Слайд 9

Промисы: цепочка

promise(...)
.then(...)
.then(...)
.then(...)
Если очередной then вернул промис, то далее по цепочке

будет передан не сам этот промис, а его результат.

Промисы: цепочка promise(...) .then(...) .then(...) .then(...) Если очередной then вернул промис, то далее

Слайд 10

Перехват ошибок

При возникновении ошибки – она отправляется в ближайший обработчик onRejected.
Такой обработчик нужно

поставить через второй аргумент .then(..., onRejected) или, что то же самое, через .catch(onRejected).

Перехват ошибок При возникновении ошибки – она отправляется в ближайший обработчик onRejected. Такой

Слайд 11

Async/Await

Важно отметить, что async-функции работают поверх промисов.
Эти функции не являются принципиально другими концепциями.
Async-функции

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

Async/Await Важно отметить, что async-функции работают поверх промисов. Эти функции не являются принципиально

Слайд 12

Async/await: Синтаксис

Async/await: Синтаксис

Слайд 13

Цепочка промисов

Async/await

=

Цепочка промисов Async/await =

Слайд 14

При этом промисы и async/await возвращают response, который нужно в рамках отдельного шага

преобразовывать с помощью метода .json().
В случае с async/await данный шаг можно визуально скипнуть:

=

При этом промисы и async/await возвращают response, который нужно в рамках отдельного шага

Слайд 15

Параллельное выполнение промисов

Комбинаторы промисов

Promise.all

Promise.any

Promise.allSettled

Promise.race

Завершен, когда все выполнены
Один reject - все игнорируются

Завершен, когда

один fulfill

Завершен, когда все выполнены
Без разницы, reject или fulfill

Завершен, когда выполнен самый быстрый (даже reject)

Параллельное выполнение промисов Комбинаторы промисов Promise.all Promise.any Promise.allSettled Promise.race Завершен, когда все выполнены

Слайд 16

Разница между комбинаторами промисов и множественными последовательными await/промисами в скорости запроса данных с

сервера

Последовательное выполнение

692 мс

Параллельное выполнение

164 мс

Разница между комбинаторами промисов и множественными последовательными await/промисами в скорости запроса данных с

Слайд 17

Слайд 18

Top-level await

Раньше ключевое слово await можно было использовать только в async функциях, что

иногда требовало прибегать к использованию конструкции IIFE (immediately invoked function expression)

Top-level await Раньше ключевое слово await можно было использовать только в async функциях,

Имя файла: Асинхронность-в-JS.pptx
Количество просмотров: 8
Количество скачиваний: 0