CodeGym /Kurse /Frontend SELF DE /Promise-Ketten

Promise-Ketten

Frontend SELF DE
Level 43 , Lektion 2
Verfügbar

3.1 Erstellen von Promise-Ketten

Promise-Ketten erlauben es dir, mehrere asynchrone Operationen nacheinander auszuführen, indem du das Ergebnis einer Operation an die nächste weitergibst. Dadurch wird der Code lesbarer und besser handhabbar. Außerdem bieten Promises leistungsstarke Möglichkeiten zur Fehlerbehandlung, was es ermöglicht, zuverlässige und fehlertolerante Anwendungen zu erstellen.

Grundkonzept

Eine Promise-Kette wird durch die Rückgabe eines neuen Promises aus der then-Methode erstellt. Jede then-Methode gibt ein neues Promise zurück, was es ermöglicht, sequentielle asynchrone Operationen zu strukturieren.

Beispiel einer einfachen Promise-Kette

In diesem Beispiel führt jede then-Methode ihre eigene Operation aus und übergibt das Ergebnis an die nächste then-Methode weiter.

JavaScript
    
      const promise = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('Schritt 1 abgeschlossen');
        }, 1000);
      });

      promise
        .then((result) => {
          console.log(result); // Gibt aus: Schritt 1 abgeschlossen
          return 'Schritt 2 abgeschlossen';
        })
        .then((result) => {
          console.log(result); // Gibt aus: Schritt 2 abgeschlossen
          return 'Schritt 3 abgeschlossen';
        })
        .then((result) => {
          console.log(result); // Gibt aus: Schritt 3 abgeschlossen
        })
        .catch((error) => {
          console.error(error);
        });
    
  

Beispiel einer Kette mit asynchronen Operationen

In diesem Beispiel wartet jede then-Methode darauf, dass die asynchrone Operation abgeschlossen ist, bevor der nächste Schritt ausgeführt wird:

JavaScript
    
      function asyncOperation(step) {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            resolve(`${step} abgeschlossen`);
          }, 1000);
        });
      }

      asyncOperation('Schritt 1')
        .then((result) => {
          console.log(result); // Gibt aus: Schritt 1 abgeschlossen
          return asyncOperation('Schritt 2');
        })
        .then((result) => {
          console.log(result); // Gibt aus: Schritt 2 abgeschlossen
          return asyncOperation('Schritt 3');
        })
        .then((result) => {
          console.log(result); // Gibt aus: Schritt 3 abgeschlossen
        })
        .catch((error) => {
          console.error(error);
        });
    
  

3.2 Fehlerbehandlung in Promise-Ketten

Die catch-Methode wird zur Fehlerbehandlung in einer Promise-Kette verwendet. Wenn in einem der Promises ein Fehler auftritt, wird dieser an die nächste catch-Methode weitergeleitet. Dies ermöglicht eine zentrale Fehlerbehandlung und verbessert die Lesbarkeit und Wartung des Codes.

Beispiel der Fehlerbehandlung

In diesem Beispiel wird der Fehler, der in Schritt 2 auftritt, von der catch-Methode abgefangen, und die nachfolgenden then-Methoden werden nicht ausgeführt:

JavaScript
    
      function asyncOperation(step, shouldFail = false) {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            if (shouldFail) {
              reject(`${step} fehlgeschlagen`);
            } else {
              resolve(`${step} abgeschlossen`);
            }
          }, 1000);
        });
      }

      asyncOperation('Schritt 1')
        .then((result) => {
          console.log(result);
          return asyncOperation('Schritt 2', true); // Diese Operation wird fehlschlagen
        })
        .then((result) => {
          console.log(result); // Dieser Code wird nicht ausgeführt
          return asyncOperation('Schritt 3');
        })
        .then((result) => {
          console.log(result); // Dieser Code wird nicht ausgeführt
        })
        .catch((error) => {
          console.error('Fehler:', error); // Gibt aus: Fehler: Schritt 2 fehlgeschlagen
        });
    
  

Fehlerbehandlung in bestimmten Schritten

Manchmal ist es notwendig, Fehler in bestimmten Schritten der Kette zu behandeln, ohne die gesamte Kette zu unterbrechen. Dafür können verschachtelte then- und catch-Methoden verwendet werden.

Beispiel der Fehlerbehandlung in bestimmten Schritten

In diesem Beispiel wird der Fehler in Schritt 2 lokal behandelt, und die Kette wird mit einem wiederhergestellten Wert fortgesetzt:

JavaScript
    
      function asyncOperation(step, shouldFail = false) {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            if (shouldFail) {
              reject(`${step} fehlgeschlagen`);
            } else {
              resolve(`${step} abgeschlossen`);
            }
          }, 1000);
        });
      }
            
      asyncOperation('Schritt 1')
        .then((result) => {
          console.log(result);
          return asyncOperation('Schritt 2', true).catch((error) => {
            console.warn('Behandelter Fehler in Schritt 2:', error);
            return 'Erholung nach Fehler in Schritt 2';
          });
        })
        .then((result) => {
          console.log(result); // Gibt aus: Erholung nach Fehler in Schritt 2
          return asyncOperation('Schritt 3');
        })
        .then((result) => {
          console.log(result); // Gibt aus: Schritt 3 abgeschlossen
        })
        .catch((error) => {
          console.error('Fehler:', error); // Dieser Code wird nicht ausgeführt
        });
    
  

3.3 Verwendung von finally

Die finally-Methode wird verwendet, um Code auszuführen, unabhängig davon, ob ein Promise erfolgreich abgeschlossen oder fehlgeschlagen ist. Dies ist nützlich für abschließende Aktionen wie das Freigeben von Ressourcen.

Beispiel der Verwendung von finally:

JavaScript
    
      function asyncOperation(step, shouldFail = false) {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            if (shouldFail) {
              reject(`${step} fehlgeschlagen`);
            } else {
              resolve(`${step} abgeschlossen`);
            }
          }, 1000);
        });
      }
      
      asyncOperation('Schritt 1')
        .then((result) => {
          console.log(result);
          return asyncOperation('Schritt 2');
        })
        .then((result) => {
          console.log(result);
          return asyncOperation('Schritt 3');
        })
        .catch((error) => {
          console.error('Fehler:', error);
        })
        .finally(() => {
          console.log('Alle Operationen abgeschlossen'); // Wird auf jeden Fall ausgeführt
        });
    
  

In diesem Beispiel wird die finally-Methode in jedem Fall ausgeführt, unabhängig davon, ob ein Fehler aufgetreten ist oder nicht.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION