⊗jsSpPrmChE 169 of 294 menu

Uitsonderings in belofteskakels in JavaScript

Laat om een of ander rede ons belofte met 'n fout eindig:

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

In hierdie geval sal die uitvoering van die kode dadelik oorgaan na die then waar daar 'n fouthandler-funksie is, of na die eerste catch, afhangende van wat eerste teëgekom word.

Hier is 'n voorbeeld van die eerste situasie:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // uitvoering sal dadelik hierheen oorgaan } ).then( function(result) { console.log(result); } );

Hier is 'n voorbeeld van die tweede situasie:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // uitvoering sal dadelik hierheen oorgaan } ).then( function(result) { console.log(result); } );

Die fouthandler-funksie het twee moontlikhede: as dit die uitsonderlike situasie hanteer het, kan dit 'n resultaat terugstuur met return en die uitvoering sal voortgaan in die ketting. As dit nie die fout kon hanteer nie, kan dit óf niks terugstuur nie, óf 'n uitsondering gooi met throw. In hierdie geval sal die uitvoering oorgaan na die volgende foutonderskepper (in then of catch - wat eerste teëgekom word).

Gewoonlik word alle foute in die ketting op een plek onderskep: 'n catch word aan die einde van die ketting geplaas:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // ons sal hier uitkom in die geval van 'n fout } );

Die uitsondering kan in die belofte self ontstaan, of gegooi word met throw in enige skakel van die ketting:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (allesGoed) { return result + '2'; } else { throw new Error('fout'); // gaan na naaste onderskepper } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // naaste onderskepper } );

Let op dat catch spesifiek nodig is vir die diagnose van die fout: is dit oplosbaar of nie. As die fout oplosbaar is, moet die catch die oplossing daarvoor oordra aan die then wat daarna volg. As dit nie oplosbaar is nie (of hierdie spesifieke catch weet eenvoudig nie hoe om dit op te los nie), moet ons óf niks terugstuur nie óf 'n uitsondering gooi:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (foutOplosbaar) { return 'data'; // stuur na die volgende then } else { // stuur niks terug nie of gooi 'n uitsondering } } ).then( function(result) { // los hier die fout op } );
Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp