здесь есть большое чтение о событии l oop.
В перспективе высокого уровня всегда есть работающий l oop, слушающий события в форме список действий и обрабатывает их по одному.
Код, которым вы поделились выше, не может использоваться глобально из-за однопоточного дизайна nodejs. nodejs делает то, что каждый раз, когда вы вызываете функцию, она помещается в очередь и обрабатывается. На каждом тике вы выталкиваете что-то из очереди и запускаете его или запускаете sh что-то новое.
В js мире никакие 2 вещи не могут запускаться одновременно. Если вы запускаете долго работающий код js, он блокирует всю систему, поэтому ваша система не реагирует на новые события, так как событие l oop заблокировано.
При этом существует другая сторона истории, когда вы Запустите все эти неблокирующие функции, которые они обрабатывают за кулисами в движке v8 js. Начиная с нативного кода v8, он может использовать такие вещи, как несколько потоков, и ждать, пока все закончится sh, или опросить вещи, проверяя, готовы ли они и какие вещи готовы, новое сообщение вставляется обратно в событие js l * 1028. * и вы получаете доступ к данным в js мире.
Итак, возвращаясь к вашему вопросу в асинхронной c функции, когда вы вызываете await, это на самом деле означает, что вы уступаете выполнение остальным вещам, ожидающим в очереди сообщений и как только то, что вы ожидали, готовится, оно отодвигается обратно в очередь, и вы продолжаете с того места, где вы оставили.
На самом деле ожидания не существует, и смысл ожидания не в том, чтобы заблокировать событие l oop с помощью встроенной функции блокировки и передать выполнение другим вещам, и вы выполняете асинхронную c функцию в конец дня возвращает обещание, которое имеет смысл только в том случае, если вы используете .then
и добавляете обратный вызов для передачи обратно в мир js, когда данные будут готовы.