• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

265
Views
¿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?

almost 3 years ago · Juan Pablo Isaza
1 answers
Answer question

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); } })();

almost 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error