⊗jsSpPrmChE 169 of 294 menu

Izuzeci u lancima promisa u JavaScript-u

Neka iz nekih razloga naš promis završi sa greškom:

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

U tom slučaju, izvršavanje koda će odmah preći onome then u kojem postoji funkcija-handler greške, ili prvom catch, šta se prvo nade.

Evo primera prve situacije:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // izvršavanje će odmah preći ovde } ).then( function(result) { console.log(result); } );

Evo primera druge situacije:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // izvršavanje će odmah preći ovde } ).then( function(result) { console.log(result); } );

Funkcija-handler ima dve mogućnosti: ako je rešila izuzetnu situaciju, može vratiti rezultat pomoću return i izvršavanje će se nastaviti dalje niz lanac. Ako nije rešila grešku, onda može ili ništa ne vratiti, ili baciti izuzetak preko throw. U tom slučaju izvršavanje prelazi na sledeći hvatač greške (u then ili catch – šta se pre nade).

U principu, sve greške lanca se hvataju na jednom mestu: na kraju lanca se postavlja catch:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // doći ćemo ovde u slučaju greške } );

Pritom, izuzetak može nastati u samom promisu, ili bačen preko throw u bilo kom kariku lanca:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (sveJeUredu) { return result + '2'; } else { throw new Error('greška'); // prelazimo na najbližeg hvatača } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // najbliži hvatač } );

Imajte u vidu da je catch potreban baš za dijagnostiku greške: da li je rešiva ili ne. Ako je greška rešiva, onda catch treba da prosledi njeno rešenje sledećem then iza sebe. A ako nije rešiva (ili ovaj catch prosto ne zna kako da je reši), onda moramo ili ništa ne vratiti ili baciti izuzetak:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (greskaJeResiva) { return 'podaci'; // šaljemo na sledeći then } else { // ništa ne vraćamo ili bacamo izuzetak } } ).then( function(result) { // ovde rešavamo grešku } );
Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij