⊗jsSpPrmChE 169 of 294 menu

Výnimky v reťazcoch promise v JavaScripte

Nech z akýchkoľvek dôvodov naša promise skončí chybou:

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

V takom prípade sa vykonávanie kódu okamžite prenesie k tomu then, v ktorom je funkcia na spracovanie chyby, alebo k prvému catch, podľa toho, čo sa nájde skôr.

Tu je príklad prvej situácie:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // vykonávanie sa okamžite prenesie sem } ).then( function(result) { console.log(result); } );

Tu je príklad druhej situácie:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // vykonávanie sa okamžite prenesie sem } ).then( function(result) { console.log(result); } );

Funkcia na spracovanie má dve možnosti akcie: ak sa jej podarilo vyriešiť výnimočnú situáciu, môže vrátiť výsledok pomocou return a vykonávanie bude pokračovať ďalej v reťazci. Ak sa jej nepodarilo chybu vyriešiť, môže buď nič nevrátiť, alebo vyhodiť výnimku pomocou throw. V tomto prípade sa vykonávanie prenesie na ďalší zachytávač chýb (v then alebo catch - podľa toho, čo sa nachádza skôr).

Spravidla sú všetky chyby reťazca zachytené na jednom mieste: na konci reťazca je umiestnený catch:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // dostaneme sa sem v prípade chyby } );

Výnimka môže vzniknúť v samotnej promise, alebo byť vyhodená pomocou throw v akomkoľvek článku reťazca:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (vsetkoJeDobre) { return result + '2'; } else { throw new Error('chyba'); // prechádzame k najbližšiemu zachytávaču } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // najbližší zachytávač } );

Majte na pamäti, že catch je potrebný práve pre diagnostiku chyby: je riešiteľná alebo nie. Ak je chyba riešiteľná, catch by mal odovzdať jej riešenie nasledujúcemu then za sebou. Ak nie je riešiteľná (alebo daný catch jednoducho nevie, ako ju vyriešiť), mali by sme buď nič nevrátiť, alebo vyhodiť výnimku:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (chybaJeRiesitelna) { return 'data'; // odosielame na ďalší then } else { // nič nevraciame alebo vyhadzujeme výnimku } } ).then( function(result) { // tu riešime chybu } );
Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť