@be9st

Как работают колбэки в js?

Почему слова "асинхронность" и "колбэки" связаны? Это же просто передача функции в функцию. Можете объяснить ПОНЯТНО, как и почему достигается асинхронность за счёт колбэков, желательно с примером (без setTimeout)
  • Вопрос задан
  • 622 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Как вы уже поняли и верно заметили, коллбэк это функция, которую передали куда-то и вызовут, когда надо будет.

Асинхронность достигается не за счёт коллбэков. Их просто удобно использовать там, где есть асинхронность. Хотя ещё удобнее промисы.

Асинхронность возникает там, где рвётся последовательный (строчка за строчкой) порядок выполнения кода. Где один код уже отыграл и отпустил движок JS – пусть остынет, нет пока больше дел. А остались навешанные слушатели событий, таймеры, нерешённые промисы, долгоиграющие ajax-запросы и прочая асинхрота.

В эти слушатели, таймауты и прочие и передают в коллбэке те строки кода, которые надо будет выполнить «потом».

Пример. Не хотите setTimeout, тогда с кнопкой пробела:
function superCallback() {
  console.log("Свершилось! Коллбэк сработал.");
}

document.addEventListener("keydown", superCallback);
// на этот момент мы объявили функцию и повесили слушатель события
// дальше всё, делать больше нечего, движок JS свободен
// но слушатель сидит, ждёт.
Наступает ночь асинхронность. Никакой код сейчас не работает. Но заряжен слушатель с коллбэком.

Теперь, если выждав паузу, нажать какую-нибудь клавишу, сработает слушатель и проиграет вслух код в коллбэке.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ArsenyMatytsyn
@ArsenyMatytsyn Куратор тега JavaScript
Руководитель frontend направления, предприниматель
В нормальном построенном коде callback выполняется либо по факту условия выполнения функции (не обязательно асинхронной).

Иными словами, если функция не выполнена, то вторая не войдет в условие. Но колбэком может стать обработчик ошибки, тоже функция.

Не знаю даж, может быть есть проще объяснение, я старался как мог)
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Callback - это именно передача функции в функцию. Переданный callback будет вызван при выполнении каких-либо условий.
Пример синхронного callback'а - функции map, forEach, reduce и т.п., которые вызывают callback для каждого элемента переданного массива и ждут пока им вернётся ответ.
Пример асинхронного callback'а - setTimer, setInterval, fetch. В этом случае callback ставится в очередь на выполнение ядром JS при выполнении определённого условия - наступлении заданного времени или приходе ответа от сервера. Основная функция к тому моменту уже завершила свою работу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы