⊗jsSpExcPrb 150 of 294 menu

Διαβίβαση Εξαιρέσεων στο JavaScript

Ας εξετάσουμε το μπλοκ catch της εργασίας με JSON προϊόντος:

catch (error) { if (error.name == 'SyntaxError') { alert('Μη έγκυρο JSON προϊόντος'); } else if (error.name == 'ProductCostError') { alert('Το προϊόν δεν έχει τιμή ή ποσότητα'); } }

Όπως βλέπετε, πιάνουμε δύο εξαιρέσεις που έχουμε προγραμματίσει και αντιδρούμε με κάποιον τρόπο. Αλλά τι θα συμβεί εάν προκύψει μια απρόβλεπτη εξαίρεση διαφορετικού τύπου; Σε αυτήν την περίπτωση θα μπει επίσης στο μπλοκ catch, αλλά δεν θα ακολουθήσει καμία αντίδραση, καθώς η εξαίρεση με διαφορετικό τύπο απλά δεν θα μπει σε καμία από τις εντολές if μας.

Όταν λέω ότι δεν θα υπάρξει καμία αντίδραση, εννοώ πραγματικά καμία: ούτε καν θα εμφανιστεί σφάλμα στην κονσόλα. Ο κώδικάς μας απλά δεν θα λειτουργεί σιωπηλά.

Γι' αυτό υπάρχει ο ακόλουθος κανόνας: ο κώδικάς σας πρέπει να πιάνει μόνο τις εξαιρέσεις με τις οποίες ξέρει πώς να αντιμετωπίσει. Εάν η εξαίρεση είναι άγνωστη, τότε πρέπει να τη διαβιβάσει παραπέρα χρησιμοποιώντας την throw. Σε αυτήν την περίπτωση πιο πάνω θα την πιάσει κάποιος με περισσότερες γνώσεις ή η εξαίρεση θα εμφανιστεί ως σφάλμα στην κονσόλα.

Ας διορθώσουμε τον κώδικά μας:

catch (error) { if (error.name == 'SyntaxError') { alert('Μη έγκυρο JSON προϊόντος'); } else if (error.name == 'ProductCostError') { alert('Το προϊόν δεν έχει τιμή ή ποσότητα'); } else { throw error; // διαβιβάζουμε την εξαίρεση παραπέρα } }

Δίνεται ο ακόλουθος κώδικας:

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('τελείωσε ο χώρος στην αποθήκη'); } if (error.name == 'SyntaxError') { alert('μη έγκυρο JSON'); } }

Τι δεν πάει καλά με αυτόν τον κώδικα; Διορθώστε τον σε έναν πιο κατάλληλο.

Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη