У меня был вопрос несколько дней назад, давайте представим, что у нас есть следующие 3 обещания:
let promise1 = axios.get(URL1);
let promise2 = axios.get(URL2);
let promise3 = axios.get(URL3);
Они будут выполняться асинхронно и возвращать данные с помощью .then(), и давайте предположим, что каждый из этих запросов GET занимает 1,00 секунды.
Общее выполнение этих запросов займет 3 секунды, верно? Есть ли способ выполнять эти запросы параллельно, чтобы мы получали данные 3 запросов за 1 секунду? Или это невозможно из-за однопоточного языка?
Спасибо.
я думаю, что самый простой способ добиться этого - использовать async/await, погуглите, я не совсем уверен, как именно это сделать, но я уверен, что это возможно
Показанные запросы выполняются параллельно. Создание промисов происходит относительно мгновенно



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Начиная с 27 мая 2020 г., вы должны использовать Promise.all:
Promise.all([axios.get(URL1), axios.get(URL2), axios.get(URL3)])
.then((responses) => {
const [url1rest, url2resp, url3resp] = responses;
// do something
});
Теперь устарело: вы можете использовать axios.all вместе с axios.spread:
axios.all([axios.get(URL1), axios.get(URL2), axios.get(URL3)])
.then(axios.spread(url1resp, url2resp, url3resp) {
// do something
});
Теоретически для выполнения 3 запросов потребуется 1 секунда?
Он запускает их одновременно, поэтому да, если каждый запрос занимает одну секунду, то все это должно занять только одну секунду.
Документация axios говорит, что .all() устарела и вместо этого запрашивает направляет на Promise.all (github.com/axios/axios#concurrency-устарело)
Код у вас буду выполняет их параллельно. В этом суть асинхронных функций.
Хотя JavaScript работает в одном цикле событий (если вы не используете Workers), асинхронный код не связан с этим циклом. Вот почему код в первую очередь асинхронный.
Ответственность за выполнение HTTP-запросов передается коду вне цикла обработки событий. Это означает, что он может выполняться параллельно.
вы получите только 3 секунды, если дождетесь завершения каждого выполнения... используйте
Promise.all(), чтобы запустить их параллельно