我正在将redux用于一个显示天气预报的小型应用程序,用户可以将城市天气预报保存到收藏夹列表中。存储的城市预报是城市的ID,因此收藏夹数组如下所示:
favoriteCities : ['12211', '43434', '43435'] // each id represent a city unique id.
调用单个城市的api的操作-如下所示:
export const getCurrentForecast = (cityCode) => {
return async dispatch => {
fetch(`http://dataservice.accuweather.com/forecasts/v1/daily/5day/${cityCode}?apikey=${apiKey}&metric=true`)
.then(function (response) {
return response.json();
})
.then(function (data) {
return dispatch({
type: "GET_CURRENT_FORECAST",
payload: data
});
});
};
};
如何从相同的请求中获得具有不同参数的所有城市预报? (城市名)
这就是我的想法(这只是一个粗略的草图)
let citiesForecasts = [];
for(let i=0; i < favoriteCities.length; i++){
// iterate over the favorite cities codes
let currentCityCode = favoriteCities[i];
citiesForecasts.push(getCurrentForecast(currentCityCode )) // push the result object
}
免责声明:尽管它看起来像是重复的帖子-并非如此-我看过很多帖子,但找不到足够的答案。
答案 0 :(得分:1)
您可以简单地通过使用Promise.all
来实现。检查以下代码。
let citiesForecasts = [];
favoriteCities.map(city => citiesForecasts.push(getCurrentForecast(city)));
Promise.all(citiesForecasts).then((results) => {
// results will comes in type of array
}).catch((err) => {
console.log(err);
});
您还可以使用axios
库和axios.all
方法来调用多个请求。
希望这对您有用!