⊗jsSpPrmChE 169 of 294 menu

Ausnahmen in Promise-Ketten in JavaScript

Nehmen wir an, aus irgendeinem Grund wird unser Promise mit einem Fehler abgeschlossen:

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

In diesem Fall springt die Ausführung sofort zu dem then, in dem es einen Fehlerbehandlungs-Handler gibt, oder zum ersten catch, je nachdem, was zuerst auftritt.

Hier ist ein Beispiel für die erste Situation:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // Ausführung springt sofort hierher } ).then( function(result) { console.log(result); } );

Hier ist ein Beispiel für die zweite Situation:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // Ausführung springt sofort hierher } ).then( function(result) { console.log(result); } );

Der Handler-Funktion stehen zwei Aktionsmöglichkeiten zur Verfügung: Wenn sie die Ausnahmesituation bewältigt hat, kann sie ein Ergebnis via return zurückgeben und die Ausführung wird in der Kette fortgesetzt. Wenn sie den Fehler nicht bewältigen konnte, kann sie entweder nichts zurückgeben oder eine Ausnahme via throw werfen. In diesem Fall springt die Ausführung zum nächsten Fehler-Handler (in then oder catch - je nachdem, was zuerst auftritt).

In der Regel werden alle Fehler der Kette an einer Stelle abgefangen: Am Ende der Kette wird ein catch platziert:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // wir landen hier im Fehlerfall } );

Dabei kann die Ausnahme im Promise selbst auftreten, oder via throw in einem beliebigen Glied der Kette geworfen werden:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (allesGut) { return result + '2'; } else { throw new Error('Fehler'); // springen zum nächsten Handler } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // nächster Handler } );

Beachten Sie, dass catch genau für die Fehlerdiagnose benötigt wird: Ist der Fehler lösbar oder nicht? Wenn der Fehler lösbar ist, muss catch seine Lösung an den nachfolgenden then weitergeben. Wenn er nicht lösbar ist (oder dieser catch einfach nicht weiß, wie er zu lösen ist), dann müssen wir entweder nichts zurückgeben oder eine Ausnahme werfen:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (fehlerLoesbar) { return 'Daten'; // senden an den nächsten then } else { // nichts zurückgeben oder Ausnahme werfen } } ).then( function(result) { // hier wird der Fehler gelöst } );
Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικά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
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen