Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.08.2019, 10:23
Новичок на форуме
Отправить личное сообщение для cybercoder Посмотреть профиль Найти все сообщения от cybercoder
 
Регистрация: 13.08.2019
Сообщений: 2

Не получается забрать данные от 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)
Ответить с цитированием
  #2 (permalink)  
Старый 13.08.2019, 10:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

cybercoder,
Promise.all
Параллельное выполнение
или
Асинхронные функции
Ответить с цитированием
  #3 (permalink)  
Старый 13.08.2019, 10:56
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

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
Ответить с цитированием
  #4 (permalink)  
Старый 18.08.2019, 09:48
Новичок на форуме
Отправить личное сообщение для cybercoder Посмотреть профиль Найти все сообщения от cybercoder
 
Регистрация: 13.08.2019
Сообщений: 2

SuperZen,
Спасибо. А как можно передать эти данные дочернему компоненту react?
Ответить с цитированием
  #5 (permalink)  
Старый 19.08.2019, 11:58
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

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
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связанные между собой данные при передачи по GET zhurchik Общие вопросы Javascript 8 19.03.2015 16:08
Передать данные через Ajax zahod5277 AJAX и COMET 1 20.01.2015 22:31
Кто то может подсказать как забрать данные со страницы загруженой в ифрейме другого с AnteFil AJAX и COMET 7 22.12.2014 10:29
Не совсем обычный фрейм и выезжающий текст при наводе на картинку. amaz245 Элементы интерфейса 35 25.12.2010 17:29
Отправить данные с контейнера (XMLHttpRequest) vladikas Библиотеки/Тулкиты/Фреймворки 7 26.11.2010 17:47