Ты действительно близко. Вы хотите
- Распределить массив из
dates.map
- Захватить результаты в элементе отдыха в вашей деструктуризации
- Вернуть результат из
axios
из map
обратный вызов
Примерно:
const [cityName, weatherData, ...celestialData] = await Promise.all([
// 2 −−−−−−−−−−−−−−−−−−−−−−−−−^^^
axios.get(
`https://maps.googleapis.com/maps/api/geocode/json?latlng=${latitude},${longitude}&key=${myKey}`
),
axios.get(
`https://api.darksky.net/forecast/${myKey}/${latitude},${longitude}`
),
...dates.map(date => {
//^^^−−−− 1
return axios.get(
//−−^^^^^^ 3
`https://api.ipgeolocation.io/astronomy?apiKey=${myKey}&lat=${latitude}&long=${longitude}&date=${date}`
);
})
]);
celestialData
будет массивом результатов для дат.
Если хотите, вы можно использовать краткую функцию стрелки для этой третьей части:
...dates.map(date => axios.get(
`https://api.ipgeolocation.io/astronomy?apiKey=${myKey}&lat=${latitude}&long=${longitude}&date=${date}`
)
Примечание: ваш текущий способ создания массива dates
вполне подходит, но если вы хотите, вы можете использовать Array.from
способность картирования:
const dates = Array.from(
Array(9),
(_, i) => moment().add(i, "days").format("YYYY-MM-DD")
);
Так как Seblor не опубликовал это как ответ, вот их подход (который кажется мне лучше поскольку он избегает расширения массива только для того, чтобы снова собрать его обратно с элементом rest в процессе деструктуризации):
const [cityName, weatherData, celestialData] = await Promise.all([
axios.get(
`https://maps.googleapis.com/maps/api/geocode/json?latlng=${latitude},${longitude}&key=${myKey}`
),
axios.get(
`https://api.darksky.net/forecast/${myKey}/${latitude},${longitude}`
),
Promise.all(dates.map(date => {
return axios.get(
`https://api.ipgeolocation.io/astronomy?apiKey=${myKey}&lat=${latitude}&long=${longitude}&date=${date}`
);
}))
]);