⊗jsSpExcPrb 150 of 294 menu

Propagarea excepțiilor în JavaScript

Să considerăm blocul catch din sarcina cu JSON-ul produsului:

catch (error) { if (error.name == 'SyntaxError') { alert('JSON incorect pentru produs'); } else if (error.name == 'ProductCostError') { alert('Produsului îi lipsește prețul sau cantitatea'); } }

După cum vedeți, prindem două excepții planificate de noi și reacționăm cumva la acestea. Dar ce se va întâmpla dacă apare o excepție neprevăzută de noi de alt tip? În acest caz, ea va intra și ea în blocul catch, dar nu va urma nicio reacție, deoarece excepția cu alt tip pur și simplu nu va intra în niciunul dintre condițiile noastre if.

Când spun că nu va fi nicio reacție, mă refer că literalmente nicio reacție: nici măcar nu va apărea o eroare în consolă. Codul nostru va eșua în tăcere.

De aceea există următoarea regulă: codul vostru ar trebui să prindă doar acele excepții cu care știe să se ocupe. Dacă excepția este necunoscută, atunci ea trebuie propagată mai departe cu ajutorul lui throw. În acest caz, mai sus o va prinde cineva mai informat sau excepția va apărea ca eroare în consolă.

Să corectăm codul nostru:

catch (error) { if (error.name == 'SyntaxError') { alert('JSON incorect pentru produs'); } else if (error.name == 'ProductCostError') { alert('Produsului îi lipsește prețul sau cantitatea'); } else { throw error; // propagăm excepția mai departe } }

Este dat următorul cod:

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('s-a epuizat spațiul din stocare'); } if (error.name == 'SyntaxError') { alert('JSON incorect'); } }

Ce nu este în regulă cu acest cod? Corectați-l cu o versiune mai bună.

kkidendehi