ну я натыкался на много статей про это. не всё полностью понятно на 100%, но понял то, что если функция требует время для выполнения, например загрузка данных из сети, то js запустит её в фоне и продолжит выполнние кода. если код требует данные, которые не загружены, то ошибка. чтобы дождаться загрузки данных, а потом продолжить выполнение, используется async/await. в общем там всё сложно. нас выгонят, если тут начнём разбираться)