⊗jsSpExcPrb 150 of 294 menu

Propagación de excepciones en JavaScript

Consideremos el bloque catch de la tarea con el JSON del producto:

catch (error) { if (error.name == 'SyntaxError') { alert('JSON del producto incorrecto'); } else if (error.name == 'ProductCostError') { alert('Al producto le falta el precio o la cantidad'); } }

Como puedes ver, capturamos dos excepciones planificadas por nosotros y reaccionamos de alguna manera. Pero, ¿qué pasará si ocurre una excepción no prevista por nosotros de otro tipo? En ese caso también caerá en el bloque catch, pero no habrá ninguna reacción a esto, ya que una excepción de otro tipo simplemente no caerá en ninguno de nuestros condicionales if.

Cuando digo que no habrá ninguna reacción, me refiero a que realmente ninguna: ni siquiera se mostrará el error en la consola. Nuestro código simplemente no funcionará en silencio.

Por lo tanto, existe la siguiente regla: tu código debe capturar solo aquellas excepciones con las que sepa cómo manejarlas. Si la excepción no es conocida, entonces debe propagarse más lejos usando throw. En este caso, alguien más informado la capturará arriba o la excepción se mostrará como un error en la consola.

Corrijamos nuestro código:

catch (error) { if (error.name == 'SyntaxError') { alert('JSON del producto incorrecto'); } else if (error.name == 'ProductCostError') { alert('Al producto le falta el precio o la cantidad'); } else { throw error; // propagamos la excepción más allá } }

Se da el siguiente código:

try { let arr = JSON.parse(json); for (let i = 0; i < arr.length; i++) { localStorage.setItem(i, arr[i]); } } catch (error) { if (error.name == 'QuotaExceededError') { alert('se agotó el espacio en el almacenamiento'); } if (error.name == 'SyntaxError') { alert('JSON incorrecto'); } }

¿Qué está mal con este código? Corrígelo a uno más adecuado.

azcshyfruzl