Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

343
Vistas
¿Cómo propagar errores no detectados en contextos de promesa a window.onerror?

a diferencia de lo que cabría esperar, el siguiente código no activará el controlador window.error

 window.addEventListener("error",function(error){ alert("uncaught error somewhere!"); }); (async function(){ let foo= ((await ( await fetch("/no_json_plz_i_want_an_error")).json())); })();

(la razón es "porque el error ocurre en un contexto de promesa" de acuerdo con un comentario sobre esta pregunta: ¿por qué no se activan los errores fetch().json() window.onerror? )

¿Cuál es la forma correcta de propagarlo explícitamente al controlador de errores de la ventana? esto tampoco funciona, por alguna razón todavía no se propaga a window.error:

 (async function(){ let foo= ((await ( await fetch("/no_json_plz_i_want_an_error")).json())); })().catch(function(err){ throw err; });

esto tampoco parece funcionar (¿por qué? ni idea)

 (async function(){ let foo= ((await ( await fetch("/no_json_plz_i_want_an_error")).json())); })().catch(function(err){ let ev = new ErrorEvent(err.message, err); window.dispatchEvent(ev); });

y este enfoque falla con el error Uncaught (in promise) DOMException: Failed to execute 'dispatchEvent' on 'EventTarget': The event provided is uninitialized. , Lo que sea que eso signifique

 (async function(){ let foo= ((await ( await fetch("/no_json_plz_i_want_an_error")).json())); })().catch(function(err){ let ev= document.createEvent("ErrorEvent"); ev.error=err; window.dispatchEvent(ev); });

entonces... ¿cuál es la forma correcta de hacerlo?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En su lugar, puede usar el evento de unhandledrejection para detectar el error de promesas en el objeto de la ventana.

Editar:

Como fetch() aún devolverá el objeto de respuesta y no se arrojará ningún error. Puede arrojar un error cuando la response.ok es falsa. Vea la función run1 continuación:

La función run2 arrojará un error de token JSON ya que response.ok es falso e intenta analizar los datos.

Puede intentar ejecutar en su entorno local porque fiddle puede envolver el manejo de errores en la consola.

 window.addEventListener("unhandledrejection", function (e) { console.log("Error occurred: " + e.reason.message); }); (async function run1() { try { let response = await fetch("/no_json_plz_i_want_an_error"); if (response.ok) { const data = response.json(); } else { throw new Error("Unable to fetch()"); } } catch (err) { throw new Error(err); } })(); (async function run2() { try { await (await fetch("/no_json_plz_i_want_an_error")).json(); } catch (err) { throw new Error(err); } })();

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda