Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

266
Views
Try Catch no funciona cuando la API fetch devuelve un 404

Es básicamente lo que dice el título, mi cadena de plantilla en la URL está formateada directamente con la entrada del usuario, y si el usuario ingresa incorrectamente, el intento / captura debería detectarlo y devolver un 404 y debería registrar en la consola "Error" mientras también devuelve " Error" en la pantalla, pero no lo hace, el Componente pasa de todos modos

 import './cssdirect/App.css'; import Daily from './components/daily'; import {useState, useEffect} from 'react' import Loading from './Loading'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faHeart } from '@fortawesome/free-solid-svg-icons' function App() { const [loading, setLoading] = useState(true) const [city, setCity] = useState('Paris') const [weatherData, setWeather] = useState([]) const [error, setError] = useState(false) const getWeather = async() =>{ setLoading(true) setError(false) try{ const resp = await fetch(`https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}&units=imperial`) const pResp = await resp.json() setWeather(pResp) setLoading(false) } catch(err){ console.log("ERRRRROOOORRRR") setError(true) } } const handleSubmit = (e) =>{ e.preventDefault() console.log(city) getWeather() } useEffect(()=>{ getWeather() },[]) if(loading==true){ return <> <h1 className='title'>Monkey Wit Da Weather</h1> <Loading/> } else if(error===true){ return<> <h1>Error</h1> </> } else{ return<> <h1 className='title'>Monkey Wit Da Weather</h1> <Daily {...weatherData} setCity={setCity} city={city} getWeather={getWeather} handleSubmit={handleSubmit}/> </> } } export default App;
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Como no es un error, devolverá una Promesa. La API de Promise propone lo siguiente:

  1. Cada tarea asíncrona devolverá un objeto de promesa.
  2. Cada objeto de promesa tendrá una función entonces que puede tomar dos argumentos, un controlador de éxito y un controlador de error.
  3. El controlador de éxito o error en la función entonces se llamará solo una vez, después de que finalice la tarea asincrónica.
  4. La función entonces también devolverá una promesa, para permitir encadenar múltiples llamadas.
  5. Cada controlador (éxito o error) puede devolver un valor, que se pasará a la siguiente función como argumento, en la cadena de promesas.
  6. Si un controlador devuelve una promesa (realiza otra solicitud asíncrona), se llamará al siguiente controlador (éxito o error) solo después de que finalice esa solicitud.

Así será :

 const resp = await fetch(`https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}&units=imperial`).then(response => { console.log("response:", response) }).catch(error => { console.log("error:", error) })
about 4 years ago · Juan Pablo Isaza Report

0

Por API de obtención :

La Promesa devuelta por fetch() no se rechazará en estado de error HTTP incluso si la respuesta es HTTP 404 o 500 . En cambio, se resolverá normalmente (con el estado ok establecido en falso) y solo se rechazará en caso de falla de la red o si algo impidió que se completara la solicitud.

 fetch('https://httpstat.us/404') .then(function(){ console.log('200 OK'); }).catch(function(){ console.console.log('404'); })

El código anterior no se encontrará con el bloque catch.

Puedes hacer algo como esto:

 class FetchError extends Error { constructor(response) { super(`HTTP error ${response.status}`); this.response = response; } } function fetchSomething(...args) { return fetch(...args) .then(response => { if (!response.ok) { throw new FetchError(response); } return response; }); }

Puedes leer más aquí github/fetch/issues/203

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!