Új hozzászólás Aktív témák

  • Karma
    félisten

    Üdv. Nekem egy olyan kérdésem lenne, hogy a try blokkban hogy tudok úgy két statementet futtatni, hogy mindkettőt lekezelje a try?

    try{
    console.log(one.showText());
    console.log(one.showText2());
    } catch ( e ){
    console.log(e.message);
    }

    Itt az első biztos exception-t fog dobni, amit a catch el is kap, és le is kezel, a problémám az, hogy utána a második statementet már nem kezeli le. Tudom, hogy egy nested try..catchel meg lehetne oldani, de az nem túl elegáns szerintem. Szóval, hogy lehet azt elérni, hogy minden statementet lekezeljen a blokk?

    Hogyhogy nem kezeli le? A második utasítás meg se fog hívódni, mert az exceptiontől kiszáll abból a belső blokkból. Ez a dolgok természetes rendje, a második függvényhívásig nem jut el a program se try blokkban, se anélkül, ha kivételt dob az első.

    A szóhasználat miatt nem jön át mit szeretnél, de azért próbálok valamit írni.

    Ha mindkettő elszállhat és mindkét hibát le akarod nyelni, akkor két try blokkot írsz egymás után.
    try {
    valami1();
    } catch (ex) {
    // kiirod, megeszed, egyremegy
    }

    try {
    valami2();
    } catch (ex) {
    }

    De ha mondjuk a második nem szállhat el, és meg akarod hívni az első hívás sikerességétől függetlenül, még akkor is ha továbbdobod a kivételt, akkor ott a finally.
    try {
    valami1();
    } catch (ex) {
    // kiirod, megeszed, egyremegy
    // vagy tovabbdobod a "throw ex;" sorral
    } finally {
    valami2();
    }

    Két try blokkot egymásba ágyazni tényleg nem szerencsés, mert amellett hogy egyre mélyebben kell indentálni, nem annyira szembetűnő hogy hiba esetén mi is történik.

    Mondjuk ha ezek a te függvényeid, akkor akár megírhatnád őket úgy, hogy csak akkor dobjanak kivételt, amikor ténylegesen valami nagy hiba történik, nem pedig a kivételek köré szervezed a logikát (klasszikus antipattern). A boolean visszatérési értékű függvények pl. jók erre.

Új hozzászólás Aktív témák