Почему вторая функция выполняется раньше если стоит await?

В JavaScript и TypeScript существует понятие асинхронности. Когда функция содержит ключевое слово async, она становится асинхронной, что означает, что она может выполняться параллельно с другими операциями и не блокирует выполнение кода. Однако, когда в асинхронной функции вызывается функция, помеченная ключевым словом await, выполнение функции останавливается до тех пор, пока не будет получен результат этой функции.

Теперь рассмотрим пример:

async function example() {
  console.log('Start');
  await secondFunction();
  console.log('End');
}

async function secondFunction() {
  console.log('Second Function');
}

example();

В данном примере функция example является асинхронной и вызывает функцию secondFunction с помощью await.

Когда программа запускается, она сначала выведет в консоль сообщение 'Start', затем выполнит вызов функции secondFunction, которая также является асинхронной.

И вот здесь происходит интересная вещь: при выполнении вызова await secondFunction(), выполнение функции example останавливается и ожидает результат выполения функции secondFunction. В момент выполнения secondFunction в консоль будет выведено сообщение 'Second Function'. После завершения secondFunction, выполнение функции example продолжится, и будет выведено сообщение 'End'.

Таким образом, вызов функции secondFunction с помощью await позволяет остановить выполнение кода в функции example до получения результата функции secondFunction. Если бы в данном примере не использовалось ключевое слово await, то функция example не должна была бы ждать результат выполнения функции secondFunction и вывела бы сообщение 'End' раньше, чем 'Second Function'.