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: 42
Ja kun virhe tapahtuu:
Hups: Jotain meni pieleen
Asynkroniselle 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