JavaScript:
Virheiden käsittely
Kuinka tehdä:
Tässä on klassinen try-catch lohko:
try {
// Koodi, joka voi aiheuttaa virheen
let tulos = mahdollisestiRiskialtisToiminto();
console.log('Onnistui:', tulos);
} catch (virhe) {
// Mitä tehdä, jos virhe tapahtuu
console.error('Hups:', virhe.viesti);
}Esimerkkituloste, kun virhettä ei tapahdu:
Onnistui: 42Ja kun virhe tapahtuu:
Hups: Jotain meni pieleenAsynkroniselle koodille, jossa on käytössä promiset, käytä try-catch lohkoa async funktion yhteydessä:
async function haeTietoja() {
try {
let data = await fetch('https://api.example.com/data');
console.log('Tiedot haettu:', data);
} catch (virhe) {
console.error('Datan hakuvirhe:', virhe.viesti);
}
}
haeTietoja();Syväsukellus
Virheenkäsittely JavaScriptissä on kehittynyt. Aikanaan (ES3, noin 1999) meillä oli käytössämme vain try-catch lohko. Ei kovin joustava, mutta teki tehtävänsä.
ES6 (2015) toi mukanaan Promiset ja antoi meille .then() ja .catch() metodit, joiden avulla pystyimme käsittelemään asynkronisia virheitä sulavammin.
fetch('https://api.example.com/data')
.then(data => console.log('Tiedot haettu:', data))
.catch(virhe => console.error('Datan hakuvirhe:', virhe.viesti));Toteutuksen yksityiskohdista puhuttaessa, kun virhe heitetään, JavaScript-moottorit luovat Error objektin, jolla on hyödyllisiä ominaisuuksia kuten viesti ja pino. Voit myös luoda omia virhetyyppejä laajentamalla Error luokkaa – kätevää monimutkaisemmissa sovelluksissa.
Vaihtoehtoja? Voisit jättää virheenkäsittelyn huomiotta (huono idea), käyttää takaisinkutsuja, joilla on ensimmäisenä parametrina virhe (terveisiä, Node.js tyyli), tai käyttää kehityskirjastoja ja -runkoja, jotka tarjoavat omia ratkaisujaan.
Katso myös
Lisätietoja virheenkäsittelystä:
- MDN try-catch: MDN try…catch
- Async/Await: MDN async function
- Opas Promiselle: MDN Promises
- Omaa virhetyypin luominen ja heittäminen: MDN Error