Sobes.tech
Junior

Wie gehst du mit der Situation um, wenn ein Versprechen mit einem Fehler (Ablehnung) endet?

sobes.tech KI

Antwort von AI

Ich verarbeite mit den Methoden .catch() oder .finally().

.catch() wird verwendet, um abgelehnte Promises zu behandeln. Wenn das Promise erfolgreich erfüllt wird, wird der .catch()-Block ignoriert.

// Fehlerbehandlung mit .catch()
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed'); // Fehler simulieren
    }
    return response.json();
  })
  .then(data => {
    console.log('Daten empfangen:', data);
  })
  .catch(error => {
    console.error('Fehler:', error); // Fehlerbehandlung hier
  });

.finally() wird unabhängig davon ausgeführt, ob das Promise erfolgreich (fulfill) oder abgelehnt (reject) wurde. Es ist nützlich, um Ressourcen zu bereinigen oder Ladeindikatoren zu verbergen.

// Verwendung von .finally() um Code nach Abschluss des Promises auszuführen
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed');
    }
    return response.json();
  })
  .then(data => {
    console.log('Daten empfangen:', data);
  })
  .catch(error => {
    console.error('Fehler:', error);
  })
  .finally(() => {
    console.log('Anfrage beendet.'); // Dieser Code wird immer ausgeführt
  });

Ich kann auch die Konstruktion try...catch innerhalb von async-Funktionen verwenden, um Fehler asynchroner Operationen, einschließlich Promises, zu behandeln:

// Fehlerbehandlung in async/await mit try...catch
async function fetchData() {
  try {
    const response = await fetch('/api/data');
    if (!response.ok) {
      throw new Error('Request failed');
    }
    const data = await response.json();
    console.log('Daten empfangen:', data);
  } catch (error) {
    console.error('Fehler:', error); // Fehlerbehandlung hier
  } finally {
    console.log('Fetch-Operation beendet.'); // Wird immer ausgeführt
  }
}

fetchData();

Die Wahl der Methode hängt vom Kontext und der erforderlichen Logik ab. .catch() ist die Hauptkonstruktion für Fehlerreaktionen, .finally() für Aktionen, die unabhängig vom Ergebnis ausgeführt werden, und try...catch in async-Funktionen bietet einen vertrauteren, synchronen Stil der Fehlerbehandlung.