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

Прежде чем начать, было бы лучше, если бы у вас было общее представление о том, как на самом деле работает javascript, даже если вы не знаете, что я расскажу обо всем этом в этой статье.Let's GOOO

Асинхронная функция — это функция, объявленная с ключевым словом async, а ключевое слово await можно использовать только внутри нее. Ключевые слова async и await позволяют писать асинхронное поведение на основе промисов в более чистом стиле, избегая необходимости явно настраивать цепочки промисов.

Что это значит, просто вместо того, чтобы писать эту очень простую команду, мы можем написать то же самое, используя асинхронное ожидание.

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

async function load(){
const res = await fetch(“data/random.json”)
const data = await res.json()
return data
}
load().then(res =>console.log(res))

Но зачем нам это вообще нужно? Почему бы не использовать простую выборку и не настроить цепочку обещаний, чтобы получить наши результаты.

Ну, ответ заключается в самом названии. async заставляет функцию работать параллельно Она работает асинхронно через цикл обработки событий.

Понимание асинхронного поведения JavaScript

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

Для лучшего понимания посмотрите этот пример. Мы знаем, что javascripts запускаются последовательно, и это однопоточный язык программирования. Тем не менее ответ, который мы здесь получим, будет 33, Тушар.

let name = "Tushar"
setTimeout(() => {
  console.log(name)
}, 0)
console.log(33) 

Поскольку в него встроен цикл событий, в таких случаях, когда мы используем веб-API, например setTimeout(), console.log() или location и т. д., когда браузер работает с таймером (или любым другим API, который он предоставляет для JS), он не передает коды для выполнения обратно в Javascript немедленно. Когда браузер закончит работу, он сохранит коды в очереди обратного вызова. Как следует из названия, это очередь, содержащая некоторые функции или коды, которые будут вызваны позже.

Цикл событий – это функция JS, которая постоянно проверяет, не пуст ли основной стек. И когда он пуст, он проверяет очередь обратного вызова и очередь микростека. Если в очереди есть коды для выполнения, они по одному передаются в стек вызовов. После выполнения кода он покидает стек, а следующий в очереди появляется до тех пор, пока очередь не опустеет.

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