⊗jsSpPrmChE 169 of 294 menu

Undtagelser i Promise-kæder i JavaScript

Lad os antage, at vores promise af en eller anden grund slutter med en fejl:

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

I dette tilfælde vil kodeudførelsen straks gå videre til det then, hvor der er en fejlhåndteringsfunktion, eller til det første catch, afhængigt af hvad der mødes først.

Her er et eksempel på den første situation:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // udførelsen vil straks gå videre hertil } ).then( function(result) { console.log(result); } );

Her er et eksempel på den anden situation:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // udførelsen vil straks gå videre hertil } ).then( function(result) { console.log(result); } );

Fejlhåndteringsfunktionen har to handlemuligheder: hvis den har håndteret undtagelsessituationen, kan den returnere et resultat via return og udførelsen fortsætter videre langs kæden. Hvis den derimod ikke kunne håndtere fejlen, kan den enten ikke returnere noget eller kaste en undtagelse via throw. I dette tilfælde vil udførelsen gå videre til den næste fejlafviser (i then eller catch - hvad der mødes først).

Som regel bliver alle fejl i kæden fanget på ét sted: et catch placeres i slutningen af kæden:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // vi kommer hertil i tilfælde af en fejl } );

Her kan undtagelsen opstå i selve promiset, eller blive kastet via throw i ethvert led af kæden:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (altGodt) { return result + '2'; } else { throw new Error('fejl'); // går videre til nærmeste afviser } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // nærmeste afviser } );

Vær opmærksom på, at catch netop er nødvendig for fejldiagnosticering: er den løsbar eller ej. Hvis fejlen er løsbar, skal catch sende dens løsning videre til det then, der følger efter den. Og hvis den ikke er løsbar (eller denne catch simpelthen ikke ved, hvordan man løser den), skal vi enten ikke returnere noget eller kaste en undtagelse:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (fejlLøsbar) { return 'data'; // sender vi videre til næste then } else { // returnerer ikke noget eller kaster undtagelse } } ).then( function(result) { // her løser vi fejlen } );
Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis