Моя проблема в том, что оператор return срабатывает до выполнения моих запросов.Другими словами, регистрируется пустой массив, а затем все запросы завершаются.
Вы не сохраняете ссылку на каждую из цепочек обещаний, созданных с помощью axios.get()
, поэтому выне могу их ждать.
После инициализации приведенный выше код выполняется следующим образом:
- Вызов
test()
- Повторяйте и создавайте каждый запрос с помощью
axios.get()
- Возврат
results
.then((results) => console.log(results)
вызывается, а results
печатаются как []
- Обрабатывает проверки, если ожидается какая-либо асинхронная работа - Ничего не ожидается
- Процесс завершается
Для того, чтобы хотя бы один из ваших запросов был обработан, потребовался бы по крайней мере следующий ход цикла событий.Однако, поскольку ваш код выполняется за один оборот четного цикла, он выполняет весь код, который вы написали, кроме обработчика ответа, присоединенного к axios.get()
.Если вы хотите получить более подробное объяснение того, что происходит на каждом ходу цикла событий и как все это работает, вы можете прочитать об этом подробнее здесь .
Вам необходимо вернуть ссылкуна каждое обещание, возвращаемое с axios.get()
.Вместо того, чтобы хранить их ответы в Массиве, храните Обещания от axios.get()
.Даже если вы используете синтаксис async/await
, вам все равно нужно использовать Promise.all()
, чтобы ожидать более одного Обещания одновременно.Promise.all()
можно использовать для ожидания всех цепочек обещаний запросов, хранящихся в вашем массиве.
Выше можно написать более кратко, используя Array#map
для перебора списка элементов и возврата результатов массива обещаний.,
const axios = require("axios");
const baseURL = 'http://examplewebsite.com/'
const requestList = items => Promise.all(
items.map(key => (
axios.get(`${baseUrl}${key}`)
.catch(err => console.error(err))
)
)
requestList(['about', 'home', 'products', 'thanks'])
.then(results => console.log(result))
.catch(err => console.error(err))