Есть ли способ приостановить выборку до получения геолокации? - PullRequest
0 голосов
/ 26 апреля 2019

Я использую API оповещения Национальной службы погоды, который может предоставлять оповещения о погоде в зависимости от местоположения.Довольно аккуратные вещи.Я хотел бы сузить информацию и извлекать информацию только на основе геолокации пользователей, которая является жизнеспособным вариантом и проверяется вручную, вводя html-адрес и заканчивая его символом long long.Я пытаюсь автоматизировать процесс построения HTML, получив их местоположение и добавив его в строку, которая возвращается и используется в строке выборки.Когда я запускаю это, консоль показывает, что в адресе отсутствует широта.

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

функция loadAlerts () {

  fetch(alertDataForUserLocation)
    .then(response => response.json())
    .then(data => {
      console.log(data) // Prints result from `response.json()` in getRequest
    })
    .catch(error => console.error(error))


  function alertDataForUserLocation() {
    var lat = "";
    var long = "";
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(showPosition);
    } else {
      alert("Geolocation needs to be enabled for this site.");
    }
    return "https://api.weather.gov/alerts/active?point=?" + lat + "," + long;
  }

  function showPosition(position) {
    lat = position.coords.latitude;
    long = position.coords.longitude;
  }

Моя логика говорит мне, что выборка вызовет функцию alertDataForUserLocation() который предоставит правильный html-адрес с латинским длинным в конце.Это не то, что показано, хотя.Ниже приведена ошибка, которую я получаю.

api.weather.gov / alerts / active? Point =?,: 1 Не удалось загрузить ресурс: сервер ответил со статусом 400 ()

1 Ответ

0 голосов
/ 26 апреля 2019

Во-первых, обновляя лат, длинный внутри showPosition, никак не собирается обновлять лат, длинный внутри alertDataForUserLocation Это не так, как работает область действия в JS. Вам придется немного изменить свой код. Чтобы убедиться, что alertDataForUserLocation возвращает правильный URL-адрес, переместите оператор return в showPosition. Вы можете сделать что-то вроде этого:

function alertDataForUserLocation() {
var lat = "";
var long = "";
if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(function showPosition(position){
  lat = position.coords.latitude;
  long = position.coords.longitude;
  let url = "https://api.weather.gov/alerts/active?point=?" + lat + "," + long;  
  return url;
  },(error)=>{console.log(error)});
} else {

  alert("Geolocation needs to be enabled for this site.");
}

}

Также проверьте правильность конечной точки API.

...