Ознакомьтесь со всеми другими моими сообщениями в разделе Мои технические статьи.
Прежде чем вы продолжите чтение, я предполагаю, что вы уже знакомы с концепцией стека вызовов, веб-API и очереди обратного вызова. Если нет, сначала проверьте цикл событий на MDN. Это даст концептуальное представление о том, что это такое.
Что такое JavaScript?
JavaScript сам по себе является однопоточным синхронным и блокирующим языком.
Да, это синхронный язык, то есть коды выполняются построчно, и он перейдет к следующей строке только после того, как завершит все текущие инструкции.
Да, это блокировка, то есть пользователь не может взаимодействовать с браузером, пока не будут выполнены все коды.
Подождите, разве JavaScript не является асинхронным и неблокирующим?
Позволь мне объяснить.
Синхронный характер приносит определенную проблему
Синхронная функция приносила плохой пользовательский опыт в определенных условиях. Например, когда код запрашивает большой запрос из базы данных, пользователям необходимо дождаться, пока ответ дойдет до пользователя-клиента.
Решение вести себя асинхронно
Быстрое решение — реализовать очередь обратного вызова. Это означает, что JavaScript определяет, является ли текущая функция веб-API или нет. Если это так, то он извлекается из стека вызовов в веб-API, и стек вызовов выполняет следующую строку, не дожидаясь завершения этого действия веб-API. JavaScript теперь ведет себя асинхронно и неблокирует.
Когда извлеченное действие завершается, оно помещается в очередь обратного вызова. Затем действие в очереди обратного вызова будет выполняться, когда стек вызовов пуст.
Итак, что такое JavaScript снова
JavaScript — это однопоточный синхронный язык, которым можно манипулировать, чтобы он вел себя асинхронно.
Асинхронность также приносит проблемы
Будет время, когда мы хотели бы дождаться завершения асинхронного действия. Например, мы обязательно хотим, чтобы наш код ждал запроса данных, прежде чем выполнять операции по возврату данных.
Здесь на помощь приходят async/await и обещания.
Проще говоря, async/await и promises — это функции, которые сообщают JavaScript, что нужно дождаться завершения текущего асинхронного действия.
Так что же такое цикл событий?
Цикл событий — это секрет, благодаря которому JavaScript ведет себя как асинхронный язык. Это механизм извлечения данных из очереди обратного вызова и помещения их в стек вызовов для выполнения.
Ссылка
- YouTube: Что вообще такое цикл событий? от JSConf
- Статья: Цикл событий на MDN
- Статья: Что такое цикл событий в JavaScript? от geeksforgeeks
- Статья:Что означает, что JavaScript является однопоточным языком? автор Шарджил
- Статья: Что такое синхронность и асинхронность?, автор Кейт Хёне.