如何使用不同的参数多次调用Api,然后存储响应?

时间:2019-09-08 12:50:03

标签: reactjs api redux

我正在将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
}

免责声明:尽管它看起来像是重复的帖子-并非如此-我看过很多帖子,但找不到足够的答案。

1 个答案:

答案 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方法来调用多个请求。

希望这对您有用!