⊗jsSpPrmChE 169 of 294 menu

Kivételek a Promise láncokban JavaScriptben

Tételezzük fel, hogy valamilyen okból a Promise-unk hiba miatt szakad meg:

let promise = new Promise(function(resolve, reject) { setTimeout(function() { reject('error'); }, 3000); });

Ebben az esetben a kód végrehajtása azonnal ugrani fog ahhoz a then-hez, amelyben van egy hibakezelő függvény, vagy az első catch-hez, attól függően, melyik következik előbb.

Itt egy példa az első helyzetre:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // a végrehajtás azonnal ide ugrik } ).then( function(result) { console.log(result); } );

Itt egy példa a második helyzetre:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // a végrehajtás azonnal ide ugrik } ).then( function(result) { console.log(result); } );

A hibakezelő függvénynek két lehetősége van: ha sikerült kezelnie a kivételes helyzetet, akkor visszaadhat egy eredményt a return-nel, és a végrehajtás folytatódik a láncban tovább. Ha viszont nem sikerült kezelnie a hibát, akkor vagy nem ad vissza semmit, vagy kivételt dob a throw-nel. Ebben az esetben a végrehajtás ugrani fog a következő hibakezelőhöz (a then-ben vagy catch-ben - attól függően, melyik következik előbb).

Általában a lánc összes hibáját egy helyen kapjuk el: a lánc végén elhelyezünk egy catch-et:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // ide érkezünk hiba esetén } );

Ebben az esetben a kivétel magában a Promise-ban keletkezhet, vagy bármelyik láncszemben eldobódhat a throw-nel:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (mindenRendben) { return result + '2'; } else { throw new Error('hiba'); // ugrunk a legközelebbi hibakezelőhöz } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // a legközelebbi hibakezelő } );

Vegyük figyelembe, hogy a catch-et pontosan a hiba diagnosztizálására használjuk: megoldható-e vagy sem. Ha a hiba megoldható, akkor a catch-nek át kell adnia a megoldását a mögötte lévő then-nek. Ha pedig nem megoldható (vagy ez a catch egyszerűen nem tudja, hogyan oldja meg), akkor vagy nem adunk vissza semmit, vagy kivételt dobunk:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (aHibaMegoldhato) { return 'adatok'; // továbbítjuk a következő then-nek } else { // nem adunk vissza semmit vagy kivételt dobunk } } ).then( function(result) { // itt oldjuk meg a hibát } );
Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás