⊗jsSpPrmChE 169 of 294 menu

Përjashtimet në zinxhirët e premtimeve në JavaScript

Le të supozojmë se për disa arsye premtimi ynë përfundon me një gabim:

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

Në këtë rast, ekzekutimi i kodit do të kalojë menjëherë te ai then në të cilin ka një funksion trajtues gabimesh, ose te catch i parë, varësisht se cili haset më parë.

Ja një shembull të situatës së parë:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // ekzekutimi do të kalojë menjëherë këtu } ).then( function(result) { console.log(result); } );

Ja një shembull të situatës së dytë:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // ekzekutimi do të kalojë menjëherë këtu } ).then( function(result) { console.log(result); } );

Funksioni trajtues ka dy mundësi veprimi: nëse e ka trajtuar situatën e përjashtimit, mund të kthejë rezultatin përmes return dhe ekzekutimi do të vazhdojë më tej përgjatë zinxhirit. Nëse nuk e ka trajtuar gabimin, mund ose të mos kthejë asgjë, ose të hedhë një përjashtim përmes throw. Në këtë rast, ekzekutimi do të kalojë te kapësi tjetër i gabimeve (në then ose catch - çfarëdo që të haset më parë).

Zakonisht, të gjitha gabimet e zinxhirit kapen në një vend: në fund të zinxhirit vendoset një catch:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // do të vijmë këtu në rast gabimi } );

Në këtë rast, përjashtimi mund të lindë në vetë premtimin, ose të hidhet përmes throw në çdo lidhje të zinxhirit:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (gjithçkaMirë) { return result + '2'; } else { throw new Error('gabim'); // kalojmë te kapësi më i afërt } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // kapësi më i afërt } );

Kini parasysh që catch nevojitet pikërisht për diagnostikimin e gabimit: a është i zgjidhshëm apo jo. Nëse gabimi është i zgjidhshëm, atëherë catch duhet t'ia kalojë zgjidhjen then pas vetes. Por nëse nuk është i zgjidhshëm (ose ky catch thjesht nuk di si ta zgjidhë atë), atëherë duhet ose të mos kthejmë asgjë ose të hedhim një përjashtim:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (gabimiIZgjidhshëm) { return 'të dhënat'; // dërgojmë te then-i pasardhës } else { // nuk kthejmë asgjë ose hedhim përjashtim } } ).then( function(result) { // këtu zgjidhim gabimin } );
Shqip
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ne përdorim cookie për funksionimin e sajtit, analizën dhe personalizimin. Përpunimi i të dhënave bëhet në përputhje me Politikën e Privatësisë.
prano të gjitha konfiguro refuzo