⊗jsSpExcPrb 150 of 294 menu

Propagazione delle eccezioni in JavaScript

Consideriamo il blocco catch del task con il JSON del prodotto:

catch (error) { if (error.name == 'SyntaxError') { alert('JSON del prodotto non valido'); } else if (error.name == 'ProductCostError') { alert('Il prodotto non ha prezzo o quantità'); } }

Come puoi vedere, intercettiamo due eccezioni da noi previste e reagiamo in qualche modo. Ma cosa succede se si verifica un'eccezione non prevista di tipo diverso? In questo caso finirà anche essa nel blocco catch, ma non ci sarà alcuna reazione, poiché un'eccezione di tipo diverso semplicemente non rientrerà in nessuno dei nostri if.

Quando dico che non ci sarà alcuna reazione, intendo proprio nulla: non ci sarà nemmeno un errore stampato in console. Il nostro codice semplicemente non funzionerà in silenzio.

Pertanto, esiste la seguente regola: il tuo codice dovrebbe catturare solo le eccezioni con cui sa come gestirle. Se l'eccezione non è conosciuta, deve essere propagata oltre utilizzando throw. In questo caso verrà catturata da qualcuno più informato oppure l'eccezione verrà stampata come errore in console.

Correggiamo il nostro codice:

catch (error) { if (error.name == 'SyntaxError') { alert('JSON del prodotto non valido'); } else if (error.name == 'ProductCostError') { alert('Il prodotto non ha prezzo o quantità'); } else { throw error; // propagiamo l'eccezione oltre } }

È dato il seguente codice:

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('spazio di archiviazione esaurito'); } if (error.name == 'SyntaxError') { alert('JSON non valido'); } }

Cosa non va in questo codice? Correggilo in modo più appropriato.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta