Callback и Promise

Выполнение до завершения (run-to-completion)

Обычные функции (не генераторы) JavaScript работают по принципу выполнение до завершения, т.е. код внутри одной функции начнет выполнятся и будет завершен до начала выполнения другой функции.

Promise

Promise — API для работы с асинхронным кодом.

Промисы имеют ряд преимуществ перед колбэками:

  • Промис всегда выдаст уведомление о разрешении, если были зарегистрированы функции resolve и reject. Одна из них в любом случае будет вызвана

  • После того как промис разрешится, его значение становится неизменным. Это поведение гарантирует что повторная проверка значения даст тот же результат. Колбэки такого гарантировать не могут

  • Промисы упрощают описание последовательности выполнения асинхронного кода

  • Делают обработку ошибок проще

При работе с промисами нужно учитывать их планирование. Если один промис разрешается другим, то распаковка последнего будет проходить следующей микрозадачей:

const promise1 = new Promise((resolve) => {
  resolve(1)
});

const promise2 = new Promise((resolve) => {
    resolve(promise1)
});

const promise3 = new Promise((resolve) => {
  resolve(2)
});

promise2.then((value) => console.log(value));
promise3.then((value) => console.log(value));

// 2
// 1

MDN Promise

Callback

Callback — функция, которая будет выполнена потом. Передается параметром в другую функцию, позволяя продолжить выполнение другой части программы через какой-то промежуток времени. Базовый элемент работы с асинхронным кодом.

function callback() {
    console.log('one second...');
}

setTimeout(callback, 1000);

Исключением является функция executor переданная в Promise, она будет выполнена сразу (синхронно).

new Promise(() => {
    console.log('now') // выполнится сразу
})

Последние обновления

© 2023 — 2026 nbeam.ru