#api #promise #axios #http-status-code-404
Вопрос:
Я пытался создать приложение погоды, но у меня возникли некоторые проблемы с проверкой статуса http в случае, если пользователь добровольно вставляет название города, которого не существует, или в случае, если пользователь допустит опечатку в поле ввода.
Единственная проблема в том, что я не могу найти способ вставить статус !== 200 в обещание axios.
Статус 200 работает довольно хорошо, но 404-нет. Я уверен, что где-то в обещании есть ошибка, но мне не удается найти выход из нее.
Более того, когда я регистрирую ошибку в консоли, она показывает это сообщение:
ошибка в консоли.журнал
Uncaught (in promise) Error: Request failed with status code 404 at e.exports (createError.js:16) at e.exports (settle.js:17) at XMLHttpRequest.E (xhr.js:66)
Язык JavaScript
try{ axios.get(`https://api.openweathermap.org/data/2.5/weather?q=${city}amp;appid=${api_key}`).then( async response =gt; { let data = await response.data if (response.status !== 200) { throw new Error(response.status); } else { console.log(data) document.getElementById('hum').textContent = data.main.humidity; document.getElementById('feels-like').textContent = data.main.feels_like; }} ) } catch(error) { if (response.status === 404) { console.log(`Err: ${error}`); throw err; } };
Любые предложения действительно приветствуются. Спасибо!
Ответ №1:
Вы try/catch
не поймаете отклонение, которое вы бросаете в свой .then()
обработчик, и не поймаете никаких отклонений, которые axios
он сам бросает, если вы await
не вызовете axios.
try { await axios.get(...).then(...) } catch(e) { // now you can catch a rejection }
Или, конечно, вы могли бы вместо этого переключиться на использование .catch()
.
Стилистически не рекомендуется смешивать try/catch
, await
и .then()
здесь. Вы должны либо сделать:
try { const response = await axios.get(...); // process response here, including throw } catch(e) { // here you can catch a rejection, either from axios // directly or from throwing in the processing }
или:
axios.get(...).then(...).catch(...)
Комментарии:
1. Большое спасибо. Ошибка заключалась в обещании. Теперь это работает.
2. @Mark88 — Поскольку похоже, что вы здесь новичок, если это ответ на ваш вопрос, вы можете указать на это сообществу, нажав галочку слева от ответа. Это также принесет вам несколько очков репутации за соблюдение надлежащей процедуры здесь.