Не получается забрать данные от fetch
function createTownslist() {
let towns = ["Sudak", "Yalta", "Kerch", "Feodosiya"];
let townslist = {};
towns.forEach(town => {
fetch(`https://api.weatherbit.io/v2.0/current?city=${town}&key=ced73555abfb464ebcb5d7e77f5be270`)
.then(res => res.json())
.then(json => townslist[town] = json.data[0])
}
)
return townslist;
}
console.log(createTownslist());
// {}
// Feodosiya: {rh: 45, pod: "d", lon: 35.37789, pres: 1008.48, timezone: "Europe/Simferopol", …}
// Kerch: {rh: 49, pod: "d", lon: 36.47429, pres: 1011.7, timezone: "Europe/Simferopol", …}
// Sudak: {rh: 42, pod: "d", lon: 34.97471, pres: 1017.46, timezone: "Europe/Simferopol", …}
// Yalta: {rh: 46, pod: "d", lon: 37.27365, pres: 1016.05, timezone: "Europe/Kiev", …}
// __proto__: Object
console.log(Object.keys(createTownslist()));
// Array(0)
// length: 0
// __proto__: Array(0)
|
|
function createTownslist() {
let towns = ["Sudak", "Yalta", "Kerch", "Feodosiya"];
return Promise.all(
towns.map(town => fetch(`https://api.weatherbit.io/v2.0/current?city=${town}&key=ced73555abfb464ebcb5d7e77f5be270`)
.then(res => res.json())
.then(json => json.data))
)
.then(response => {
return towns.reduce((acc, town, i) => {
acc[town] = response[i]
return acc
}, {})
})
}
// createTownslist().then(towns => console.log(Object.keys(towns), towns));
(async function () {
const towns = await createTownslist()
console.log(Object.keys(towns), towns)
})()
надо разбираться с асинхронность ) ЯП https://medium.com/@stasonmars/%D0%B...it-ba5f47f4436 |
SuperZen,
Спасибо. А как можно передать эти данные дочернему компоненту react? |
import React from 'react'
function ForecastItem({ town, data }) {
return <React.Fragment>
<div>
{town} - {JSON.stringify(data)}
</div>
<hr />
</React.Fragment>
}
function App() {
const [forecast, setForecast] = React.useState({})
const memoForecast = React.useMemo(
() => {
return Object.keys(forecast).map(forecastKey => (
<ForecastItem
key={forecastKey}
town={forecastKey}
data={forecast[forecastKey]}
/>
))
},
[forecast]
)
React.useEffect(
() => {
let towns = ["Sudak", "Yalta", "Kerch", "Feodosiya"];
Promise.all(
towns.map(town => fetch(`https://api.weatherbit.io/v2.0/current?city=${town}&key=ced73555abfb464ebcb5d7e77f5be270`)
.then(res => res.json())
.then(json => json.data))
)
.then(response => {
setForecast(towns.reduce((acc, town, i) => {
acc[town] = response[i]
return acc
}, {}))
})
},
[]
)
return memoForecast
}
export default App
если данные нужны глобально можно использовать https://reactjs.org/docs/context.html |
| Часовой пояс GMT +3, время: 21:39. |