Я много читал в Интернете, пытаясь понять, как писать асинхронный код JavaScript. Одна из техник, которая часто используется в моих исследованиях, - это использование обратных вызовов. Хотя я понимаю процесс написания и выполнения функции обратного вызова, я запутался, почему обратные вызовы автоматически делают выполнение JavaScript асинхронным. Итак, мой вопрос: как добавление функций обратного вызова в мой код JavaScript делает указанный код автоматически асинхронным?
javascript
asynchronous-programming
Зак Дзюра
источник
источник
Ответы:
Это не так. Просто обратный вызов или передача обратного вызова не означает, что он асинхронный.
Например,
.forEach
функция принимает обратный вызов, но является синхронной.Он также
setTimeout
принимает обратный вызов и является асинхронным.Подключение к любому асинхронному событию в Javascript всегда требует обратного вызова, но это не означает, что вызов функций или их передача всегда асинхронны.
источник
Секрет «магии» в том, что события, которым вы назначаете обратные вызовы, являются асинхронными. Они реализованы «под капотом», чтобы позаботиться о том, что они делают (например, извлекать что-то с удаленного сервера) в фоновом режиме, вне песочницы JS. И затем, как только они закончили свою работу, они дают движку JS сообщение для вызова события. Когда механизм JS завершит работу с тем, что он в данный момент делает, он будет вызывать любые события, находящиеся в очереди (или ждать нового сообщения), а затем ваш обратный вызов «магически» вызывается асинхронно!
( ПРИМЕЧАНИЕ. Это концептуальный обзор темы очень высокого уровня, который не углубляется в детали, потому что разные движки JS будут реализовывать вещи по-разному. Но это общая идея того, как это работает.)
источник