Fetch API (Javascript) работает только при отладке (точки останова) - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь получить JSON из внешнего источника - Open Weather Map, и я использую Javascript Fetch API для создания запроса. Мне нужно вернуть текущую погоду в месте через JSON, которое я могу проанализировать с помощью API Open Weather Map. Когда я отлаживаю свои приложения и у меня есть точки останова в операторе выборки, запрос отправляется, и я получаю быстрый ответ от API. После удаления точек останова я получаю следующее сообщение от консоли Firefox Developer Edition TypeError: NetworkError when attempting to fetch resource., консоль Google Chrome не регистрирует ошибку, но я вижу, что новый сетевой запрос не был сгенерирован.

const submitButton = document.querySelector('.submit-zip-button');
const APIKEY = 'REDACTED';

function parseWeather(currentWeather){
    let currentTemp = currentWeather.main.temp;
    let currentWeatherDescription = currentWeather.weather[0].description;
    let weatherIconCode = currentWeather.weather[0].icon;
}

function getWeather(zipNum){
    let weatherData = new Object();

    fetch(`https://api.openweathermap.org/data/2.5/weather?zip=${zipNum},us&units=imperial&appid=${APIKEY}`)
        .then(response => response.json())
        .then(data => {
            console.log(data);
            weatherData = data;
            parseWeather(weatherData);
    });
}

submitButton.addEventListener('click', function(event){
    event.stopPropagation();
    let zipcode = document.querySelector('#zipcode-input');
    zipcode = Number(zipcode.value);
    getWeather(zipcode);

Есть ли у кого-нибудь какие-нибудь советы или материалы, которые я могу прочитать, чтобы лучше понять, что происходит? Я прочитал Fetch MDN Page и использовал их пример кода в качестве основы моей функции выборки.

1 Ответ

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

Я вижу выборку, но нет asyn c / await или любого другого способа ожидания запроса на завершение sh.

JS не будет ждать завершения вашего запроса sh, он просто продолжит работу. К моменту завершения запроса выполнение этого кода уже давно прекратится.

Здесь есть похожий пост здесь , а также более подробное объяснение, почему и как ждать запроса прямо здесь .

Если вы установить точки останова, вы замедляете выполнение программы, и в этот момент она сможет завершить sh запрос, имея достаточно времени. Поэтому в режиме отладки работает. В производстве не потребуется времени, чтобы ничего ждать, пока вы ему не скажете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...