Получение местоположения пользователей и передача его в функцию Async / Await перед извлечением URL - PullRequest
0 голосов
/ 04 мая 2020

Я получаю данные о погоде пользователей на основе их местоположения (долгота, широта).

У меня проблемы с передачей значений долготы и широты в выбранный URL.

Как передать значение долготы и широты в функцию getWeather () до получения URL-адреса?

function success(pos) {
  var crd = pos.coords;
  let longitude = crd.longitude;
  let latitude = crd.latitude;
}

navigator.geolocation.getCurrentPosition(success, error, options);

async function getWeather() {
    const res = await fetch(`https://fcc-weather-api.glitch.me/api/current?lat=${latitude}&lon=${longitude}`);
    const data = await res.json();
    return data;
}

async function showWeather() {
    const weather = await getWeather();
    if (weather) {
        tempContainer.innerHTML = `${Math.round(weather.main.temp)}°C`;
        tempLocationContainer.innerHTML = weather.name;
    }
}

showWeather();

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Чтобы решить эту проблему, я вызвал функцию showWeather () внутри функции success () и передал long и lat в качестве аргументов. Затем я перенес их в свою функцию getWeather ().

По пути я установил много консольных журналов для отслеживания стека вызовов каждого тела функции.

function success(pos) {
  var crd = pos.coords;
  const long = crd.longitude;
  const lat = crd.latitude;

  showWeather(long,lat);
}

navigator.geolocation.getCurrentPosition(success, error, options);

async function getWeather(long, lat) {
    const res = await fetch(`https://fcc-weather-api.glitch.me/api/current?lat=${lat}&lon=${long}`);
    const data = await res.json();
    return data;
}

async function showWeather(long, lat) {
    const weather = await getWeather(long, lat);
    if (weather) {
        tempContainer.innerHTML = `${Math.round(weather.main.temp)}°C`;
        tempLocationContainer.innerHTML = weather.name;
    }
};
0 голосов
/ 04 мая 2020

вы создаете переменные с let, которые ограничивают переменную областью, в которой она создается.

Попробуйте создать долготу и широту вне области действия функции, доступ к которой осуществляется глобально.

Вы также можете переместить navigator.geolocation.getCurrentPosition(success, error, options); внутрь функции getWeather.

async function getWeather() {
  let data;
  navigator.geolocation.getCurrentPosition(({latitude, longitude}) => {
    const res = await fetch(`https://fcc-weather-api.glitch.me/api/current?lat=${latitude}&lon=${longitude}`);
    data = await res.json();
  }, error, options);
}
...