You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.5 KiB
34 lines
1.5 KiB
import { City, Weather } from '../../data/stub';
|
|
import {GET_CITIES} from '../constants';
|
|
import { setWeather } from './setWeather';
|
|
|
|
export const getWeatherList = () => {
|
|
return async dispatch => {
|
|
|
|
try {
|
|
const cityPromise = await fetch('https://iut-weather-api.azurewebsites.net/cities');
|
|
|
|
const cityListJson = await cityPromise.json();
|
|
|
|
const cityList: City[] = cityListJson.map((elt: { [x: string]: any; }) => new City(elt["name"], elt["latitude"], elt["longitude"]));
|
|
|
|
const promises = cityList.map( (city) =>{
|
|
return fetch('https://iut-weather-api.azurewebsites.net/weather/city/name/'+city.name);
|
|
})
|
|
Promise.all(promises).then((values) => {
|
|
const prom = values.map(async resp => {
|
|
const weatherJson = await resp.json();
|
|
return new Weather(weatherJson["at"], weatherJson["visibility"], weatherJson["weatherType"], weatherJson["weatherDescription"], weatherJson["temperature"], weatherJson["temperatureFeelsLike"], weatherJson["humidity"], weatherJson["windspeed"], weatherJson["pressure"], new City(weatherJson["city"]["name"], weatherJson["city"]["latitude"], weatherJson["city"]["longitude"]));
|
|
});
|
|
Promise.all(prom).then((values) => {
|
|
dispatch(setWeather(values));
|
|
})
|
|
|
|
})
|
|
} catch (error) {
|
|
console.log('Error---------', error);
|
|
//You can dispatch to another action if you want to display an error message in the application
|
|
//dispatch(fetchDataRejected(error))
|
|
}
|
|
}
|
|
} |