В цикле для вы создаете URL-адрес примерно так: https://catfact.ninja/facts/facts?page=1
- это неверно, правильный URL-адрес должен быть https://catfact.ninja/facts?page=1
(с фактами только один раз).
Кроме того, ключевое слово async
здесь не нужно, и вы должны вернуть результат axios.all
.
Правильная версия вашего кода:
const dataArray = function (total) {
let baseUrl = url+"s?page="
let res =[];
let promises = [];
for (let page = 1; page <= total; page++){
promises.push(axios.get(baseUrl+page))
}
return axios.all(promises).then(result => {
console.log(result);
return result;
});
}
Затем вы можете получить свои данные следующим образом:
let arr = await dataArray(5);
Получение фактических данных так, как вы хотите
Из ваших комментариев я вижу, что выдействительно нужно пост-обработать данные, полученные из API, чтобы в итоге получить один массив, который содержит только данные cat.
Вы можете сделать это, «массируя» данные с помощью map и уменьшить , например так:
return axios
.all(promises)
.then(result => result.map(({ data }) => data.data).reduce((curr, acc) => acc.concat(curr), []));
Примечание. Я здесь для краткости опущу здесь выражение console.log.
- Фактические данные вложеныкак свойство 'data' в объекте внутри объекта как свойство 'data', поэтому вызов map возвращает
- Мы получаем массивмассивов, каждый с объектом с данными cat; уменьшение вызов сводит это к простому массиву данных кошки