⊗jsSpPrmChE 169 of 294 menu

Unntak i promise-kjeder i JavaScript

La oss si at vårt promise av en eller annen grunn avsluttes med en feil:

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

I dette tilfellet vil kjøringen umiddelbart gå til den then som har en feilbehandlingsfunksjon, eller til den første catch, avhengig av hva som kommer først.

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

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // kjøringen vil umiddelbart gå hit } ).then( function(result) { console.log(result); } );

Her er et eksempel på den andre situasjonen:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // kjøringen vil umiddelbart gå hit } ).then( function(result) { console.log(result); } );

Feilbehandlingsfunksjonen har to handlemåter: hvis den taklet unntakssituasjonen, kan den returnere et resultat via return og kjøringen vil fortsette videre langs kjeden. Hvis den derimot ikke taklet feilen, kan den enten ikke returnere noe, eller kaste et unntak via throw. I dette tilfellet vil kjøringen gå til neste feilfanger (i then eller catch - avhengig av hva som kommer først).

Som regel fanges alle feil i kjeden på ett sted: en catch plasseres på slutten av kjeden:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // vi kommer hit ved en feil } );

Unntaket kan oppstå i selve promise, eller kastes via throw i et hvilket som helst ledd i kjeden:

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

Husk at catch trengs nettopp for å diagnostisere feilen: er den løsbar eller ikke. Hvis feilen er løsbar, bør catch sende løsningen videre til then etter seg. Og hvis den ikke er løsbar (eller denne catch rett og slett ikke vet hvordan den skal løses), bør vi enten ikke returnere noe eller kaste et unntak:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (feilLøsbar) { return 'data'; // sender til neste then } else { // returnerer ingenting eller kaster unntak } } ).then( function(result) { // her løser vi feilen } );
Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis