Please enable JavaScript.
Coggle requires JavaScript to display documents.
Лекция 8 Асинхронность. Часть2 (Повторение (В Node всегда один поток …
Лекция 8 Асинхронность. Часть2
Повторение
В Node всегда один поток
Нельзя в одном потоке одновременно выполнять две задачи В любой момент времени, любой участок
кода исполняется в единственном потоке.
Код делится на Now $ Later
Отложенное выполнение доступно за счет механизма Event Loop
Инструменты для организации асинхроного кода
callback
есть код мы его исполняем, функция которая написана в callback. выполняется по мере вызова
в Node колбеки принято писать в след стиле. (анотация ноды) settimout не по анатации ноды
Минусы
callback
1)Нелинейный код
2) callback hell Вложенность
3)Необработанные исключения. В примере упадем на парсинге Задача1
4) Долго ждать Задача2
Задача 2 Вычислить среднюю температуру воздуха
по области используя API погоды
Библиотека async.js для асинхронныз запросов
Итог
+П Простая абстракция Самые быстрые.
-М Нелинейный код
-М callback hell
-М необработанные исключения
-М Сложный код когда несколько асинхронностей
promis
Вызов метода .then возвращает новый
промис
Success когда колбек или сам промис завершился успешно
Error Когда колбек или сам промис зареджектились тк произошла ошибка или вызвался метод реджект
Хелперы
Две функции
1 пробрасывает данные дальше как есть
2 пробрасывает ошибку дальше
В случае ошибки в промисе кидаем ее дальше в ошибки.
В случае успеха прокидываем первую функцию как есть
Задача 3 Получить тем и записать в файл
Функция возвращает новый Промис где строим .юрл, делаем запрос, если все хорошо вызывает
резолв
с телом ответа, если все плохо то выполняем функцию
реджект
Пишем функцию сохранения в файл
Чейнинг сила
З Promise.all
Promis.resolve сразу без ошибки
Promise.reject сразу с ошибкой
Итог
-М Сложная абстракция
-М Более линейный код
+П избавились от callback hell
+П нет необработанных исключений
+П Легче писать сложную логику
Полифилы, библиотеки BlueBird
await
указывает на то что нужно дождаться выполнения промиса. Если промис зарезолвился- вернется результат иначе вознекнет исключение
async await
позволяют написать асинхронный код в синхронном стиле , не тормозит основной потом
await можно писать в фукции которая помечена async. и тогда она можетфункция умеет делать асинхронность. вызывая эту функцию мы получаем промис. вызывая asyncхроную функцию мы получаем промис. вызывая await перед промисом мы дожидаемся асинхронности. те
авэйт ставим перед промисами вызывая асинк получаем промисы
.
Итого
-М Абстракия сложная
+П Код линейный
+П Колбек хела нет
+П Нет обработаных исключений
+П Легче писать сложную логику