Сім п’ятниць асинхронності JavaScript

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

Callback API

Callback API - это общее название для подхода к обработке асинхронных операций с использованием функции обратного вызова (callback). Этот подход является естественной реализацией базового синтаксиса JavaScript при использовании асинхронных функций и не связан с каким-то конкретным методом или библиотекой.

Суть асинхронного вызова функции, например для получения данных, в том, что сама функция не возвращает данные, но вызывает callback-функцию, когда данные будут готовы для возврата:

Главным недостатком этого подхода является так называемый "Callback Hell" - глубокая вложенность колбэков при множественных асинхронных операциях и сложность управления потоком выполнения:

 

Promise API

Promise API для управления результатами асинхронных операций использует объекты класса Promise.

pending). Возвращённый промис будет исполнен(resolved/rejected

  • Конструктор
    • new Promise(executor) создает объект Promise; в основном используется для обертки Callback API, которые не поддерживают Promise
      • executor исполнительная функция, которая принимает !!! function (resolve, reject) {} , выполняемая конструктором !!! В качестве параметров он получает две функции:solveFunc и ignoreFunc. Любые ошибки, возникающие в исполнителе, приведут к отклонению обещания, а возвращаемое значение будет проигнорировано
  • Свойства
    • Promise[@@species]
  • Методы
    • Promise.all(iterable) возвращает промис, который выполнится тогда, когда будут выполнены все промисы, переданные в виде перечисляемого аргумента, или отклонено любое из переданных промисов
      • iterable Перечисляемый объект, например, массив (Array)
    • Promise.allSettled()
    • Promise.any(iterable)
    • Promise.prototype.catch()
    • Promise.prototype.finally()
    • Promise.race()
    • Promise.reject()
    • Promise.resolve()
    • Promise.prototype.then(onFulfilled[, onRejected]);p.then(value => {
      // выполнение
      }, reason => {
      // отклонение
      });
    • Promise.withResolvers()

//

 

 

!!! async/await

Ключевое слово async позволяет сделать из обычной функции (function declaration или function expression) асинхронную функцию (async function). Такая функция делает две вещи: - Оборачивает возвращаемое значение в Promise - Позволяет использовать ключевое слово await (см. дальше)

Synchronous API

Джерела

Разбираемся с промисами в JavaScript @habr.com (Feb 10, 2019)

Leave a Reply