⊗jsSpPrmChE 169 of 294 menu

Izjeme v verigah promisov v JavaScript

Recimo, da se iz kakršnega koli razloga naš promise konča z napako:

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

V tem primeru bo izvajanje koda takoj prešlo k tistemu then, ki vsebuje funkcijo za obdelavo napake, ali k prvemu catch, odvisno kateri se pojavi prej.

Tukaj je primer prve situacije:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // izvajanje bo takoj prešlo sem } ).then( function(result) { console.log(result); } );

Tukaj je primer druge situacije:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // izvajanje bo takoj prešlo sem } ).then( function(result) { console.log(result); } );

Funkcija za obdelavo ima dve možnosti ukrepanja: če je uspešno obvladala izjemno situacijo, lahko vrne rezultat z return in izvajanje se bo nadaljevalo naprej po verigi. Če pa ni uspela obvladati napake, lahko ali ne vrne ničesar, ali vrže izjemo z throw. V tem primeru bo izvajanje prešlo na naslednji prestreznik napak (v then ali catch - karkoli se pojavi prej).

Praviloma so vse napake verige prestrežene na enem mestu: na koncu verige se nahaja catch:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // pridemo sem v primeru napake } );

Poleg tega se lahko izjema pojavi v samem promisu ali pa je vržena z throw v katerem koli členu verige:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (vseJeVRedu) { return result + '2'; } else { throw new Error('napaka'); // prehodimo na najbližji prestreznik } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // najbližji prestreznik } );

Upoštevajte, da je catch potreben ravno za diagnosticiranje napake: ali je rešljiva ali ne. Če je napaka rešljiva, mora catch njeno rešitev posredovati naslednjemu then za seboj. Če pa ni rešljiva (ali ta catch preprosto ne ve, kako jo rešiti), potem moramo ali nič vrniti ali vreči izjemo:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (napakaJeResljiva) { return 'podatki'; // pošljemo na naslednji then } else { // nič ne vrnemo ali vržemo izjemo } } ).then( function(result) { // tukaj rešimo napako } );
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
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni