Три функции выполняются в том порядке, в котором вы их поместили. Но эти функции могут использовать некоторый асинхронный запрос (например, http-запрос), и JavaScript не блокирует выполнение для ожидания ответа на такие запросы. Вместо этого эти функции обычно имеют прослушиватель для события, всплывающего из нижних уровней операционной системы, и они немедленно возвращают обещание, не ожидая таких событий.
Итак, первая функция запускает запрос и возвращает обещание, затем вторая функция делает то же самое, а затем третья. Затем у нас есть три неразрешенных обещания, которые передаются в Promise.all
, что также возвращает неразрешенное обещание.
Затем начинается ожидание ...
Обработка этих асинхронных запросов может происходить на другом уровне, возможно, даже на другом сервере, в некоторой базе данных или веб-службе. Как правило, такая обработка может быть параллельной, поскольку она не ограничена однопоточным механизмом JavaScript. Эта обработка в конечном итоге приводит к событию в очереди событий JavaScript. Прослушиватели событий, о которых я упоминал ранее, вызываются циклом событий JS, и эти обработчики разрешают соответствующие обещания.
Поскольку обработка трех задач может иметь разную продолжительность, порядок разрешения обещаний не гарантируется.
Но когда все три обещания разрешены (независимо от порядка их разрешения), обещание, возвращенное Promise.all
, также разрешится.
Итак, да, все будет работать параллельно, но не код JavaScript.