Параллельные запросы Axios

У меня был вопрос несколько дней назад, давайте представим, что у нас есть следующие 3 обещания:

let promise1 = axios.get(URL1);
let promise2 = axios.get(URL2);
let promise3 = axios.get(URL3);

Они будут выполняться асинхронно и возвращать данные с помощью .then(), и давайте предположим, что каждый из этих запросов GET занимает 1,00 секунды.

Общее выполнение этих запросов займет 3 секунды, верно? Есть ли способ выполнять эти запросы параллельно, чтобы мы получали данные 3 запросов за 1 секунду? Или это невозможно из-за однопоточного языка?

Спасибо.

вы получите только 3 секунды, если дождетесь завершения каждого выполнения... используйте Promise.all(), чтобы запустить их параллельно

Chiller 17.07.2019 00:17

я думаю, что самый простой способ добиться этого - использовать async/await, погуглите, я не совсем уверен, как именно это сделать, но я уверен, что это возможно

Mladen Skrbic 17.07.2019 00:20
techbrij.com/javascript-async-await-parallel-sequence
Mladen Skrbic 17.07.2019 00:21

Показанные запросы выполняются параллельно. Создание промисов происходит относительно мгновенно

charlietfl 17.07.2019 00:26
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
4
6 794
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Начиная с 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 секунда?

Will Paiz 17.07.2019 00:20

Он запускает их одновременно, поэтому да, если каждый запрос занимает одну секунду, то все это должно занять только одну секунду.

dave 17.07.2019 00:21

Документация axios говорит, что .all() устарела и вместо этого запрашивает направляет на Promise.all (github.com/axios/axios#concurrency-устарело)

Oded Ben Dov 09.03.2021 11:20

Код у вас буду выполняет их параллельно. В этом суть асинхронных функций.

Хотя JavaScript работает в одном цикле событий (если вы не используете Workers), асинхронный код не связан с этим циклом. Вот почему код в первую очередь асинхронный.

Ответственность за выполнение HTTP-запросов передается коду вне цикла обработки событий. Это означает, что он может выполняться параллельно.

Другие вопросы по теме