Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблемы с распараллеливанием. (https://javascript.ru/forum/events/75887-problemy-s-rasparallelivaniem.html)

Neor 15.11.2018 01:07

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

cityName.addEventListener('keypress', function(e) {
  if (e.keyCode == ENTER_KEY_CODE) {
    var url = creatingUrl(cityName);
    weather = query(url);
    console.log(weather); //undefined
  }
});

function query(theUrl) {
  xhr.open('GET', theUrl);
  xhr.send();
  xhr.addEventListener('readystatechange', function() {
    if (xhr.readyState != xhr.DONE) {
      return;
    }
    if (xhr.status != 200) {
      console.log('Error? Error!');
    } else {
      var serverAnswer = JSON.parse(xhr.responseText);
      console.log(serverAnswer);
      OtherWeatherData.style.display = 'block';
      requestAccepted(serverAnswer);
      // return serverAnswer;
      return 17;
    }
  })
}

MallSerg 15.11.2018 08:13

У функции query нет ни одного оператора return по этому она ничего не возвращает.

Dilettante_Pro 15.11.2018 11:51

А обработчику события некуда возвращать значение.

Neor 15.11.2018 13:18

А вот так?
cityName.addEventListener('keypress', function(e) {
  if (e.keyCode == ENTER_KEY_CODE) {
    var url = creatingUrl(cityName);
    weather = query(url);
    console.log(weather); //undefined
  }
});

function query(theUrl) {
  xhr.open('GET', theUrl);
  xhr.send();
  xhr.addEventListener('readystatechange', function() {
    if (xhr.readyState != xhr.DONE) {
      return;
    }
    if (xhr.status != 200) {
      console.log('Error? Error!');
    } else {
      var serverAnswer = JSON.parse(xhr.responseText);
      console.log(serverAnswer);
      OtherWeatherData.style.display = 'block';
      requestAccepted(serverAnswer);
      return serverAnswer;
    }
  })
}

рони 15.11.2018 13:45

Neor,
строка 5 и 23 бесполезны, всё что нужно сделать с данными делайте в строке 20.

Neor 19.11.2018 15:21

Благодарю за помощь.


Часовой пояс GMT +3, время: 01:43.