React-Native Promise.all и несколько запросов API - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь получить 2 разных API-запроса от OpenWeather для приложения погоды, написанного на React-Native. В любом случае, я новичок в использовании API, но я также пытаюсь использовать 2 одновременно. Я прошел дюжину турориалов и не могу заставить его работать. Самый обиженный выглядел довольно прямо, но я все еще получаю ошибки. Любая помощь будет оценена. Вот самый последний код / ​​попробуйте. Мой линтер продолжает говорить, что;или, после ...

let currentWeather => finalVals[0];

let dailyWeather => finalVals[1];

... неправильно, но их изменение тоже ничего не помогает. Вот ссылка на этот туториал, который я тоже использовал: https://medium.com/@gianpaul.r/fetching-from-multiple-api-endpoints-at-once-ffb1b54600f9

А вот мой код:

_getWeather = (lat, long) => {

     let currentWeather = fetch(`http://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${long}&APPID=${API_KEY}`);
     let dailyWeather = fetch(`http://api.openweathermap.org/data/2.5/forecast?lat=${lat}&lon=${long}&APPID=${API_KEY}`);

     Promise.all([currentWeather, dailyWeather])
      .then(values => Promise.all(values.map(value => value.json())))
      .then(finalVals => {
        let currentWeather => finalVals[0];
        let dailyWeather => finalVals[1];

        this.setState({
          temperature: Math.floor((currentWeather.main.temp) - 273.15),
          name: currentWeather.weather[0].main,
          location: currentWeather.name,
          isLoaded: true
        });
      });
  };

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Эрик, рад, что вы нашли свою ошибку! В качестве альтернативы вы можете значительно упростить свою функцию для удобства чтения и ясности, используя синтаксис await.

  _getWeather = async(lat, long) => {

 let currentWeatherEndpoint = fetch(`http://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${long}&APPID=${API_KEY}`);
 let dailyWeatherEndpoint = fetch(`http://api.openweathermap.org/data/2.5/forecast?lat=${lat}&lon=${long}&APPID=${API_KEY}`);

 let finalVals = await Promise.all([currentWeatherEndpoint, dailyWeatherEndpoint])

    let currentWeather = finalVals[0];
    let dailyWeather = finalVals[1];

    this.setState({
      temperature: Math.floor((currentWeather.main.temp) - 273.15),
      name: currentWeather.weather[0].main,
      location: currentWeather.name,
      isLoaded: true
  });

};

0 голосов
/ 18 октября 2019

Вздох ... после того, как в течение часа ударился головой о стену, я понял, что у меня есть функциональные стрелки там, где их не должно было быть. Приносим свои извинения за этот пост, если никто не видит каких-либо других проблем с этим методом.

...