⊗jsSpExcDAE 148 of 294 menu

Példa kivételkezelésre data- attribútumokkal JavaScriptben

Tegyük fel, hogy az oldal betöltésekor a szerver létrehozza a HTML kódot, amely a termék nevét, árát és a vásárolt mennyiséget tárolja:

<div id="product" data-product="alma" data-price="1000" data-amount="5"></div>

Készítsünk egy függvényt, amely átveszi a terméket tartalmazó elem referenciáját és megkeresi a termék teljes költségét (ár szorozva a mennyiséggel):

function getCost(elem) { return elem.dataset.price * elem.dataset.amount; }

Keressük meg a termékünk költségét:

let product = document.querySelector('#product'); let cost = getCost(product); alert(cost);

Tegyük fel most a következő helyzetet: valamilyen hiba miatt a szerver olyan terméket küldött, amelyből hiányzik az ár vagy a mennyiség (vagy mindkettő egyszerre), például így:

<div id="product" data-product="alma" data-price="1000"></div>

Ha most megpróbáljuk kiszámolni a termék költségét, az eredmény NaN lesz a képernyőn. Egészítsük ki, nem túl informatív.

Kiderült, hogy valahogy meg kell védenünk magunkat attól, hogy a szükséges attribútumok hiányoznak. Ezt két úton tehetjük meg. Az első út - azt mondani, hogy ez normális viselkedés, és egyszerűen ellenőrizni if-ekkel a szükséges attribútumok jelenlétét:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { return 0; // adjunk vissza valamit, például 0-t vagy null-t vagy false-t } }

A második lehetőség - azt mondani, hogy a data-price vagy data-amount attribútum hiánya - kivételes helyzet. Ebben az esetben kivételt dobunk:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { throw { name: 'ProductCostError', message: 'hiányzik az ár vagy a mennyiség a termékből' }; } }

A két lehetőség közül melyik alkalmazása helyénvalóbb itt - az a programozó döntése. Ő dönthet úgy, hogy a probléma a szkript normális működése, vagy kivételes helyzet.

Tegyük fel, hogy úgy döntöttünk, a helyzet kivételes. Ekkor a termék költségének meghatározása így fog kinézni:

let product = document.querySelector('#product'); try { let cost = getCost(product); alert(cost); } catch (error) { // valahogy reagálunk a kivételre }

Alakítsa át a kódomat úgy, hogy a getCost függvény két típusú kivételt dobjon: ha hiányzik az ár, és ha hiányzik a mennyiség. Gondolja át jól ezen kivételek neveit. A catch blokkban jelenítsen meg különböző hibaüzeneteket a különböző típusú kivételekhez.

ruhudanlka