Sobes.tech
Junior

Welche Arten von Promise kennst du?

sobes.tech KI

Antwort von AI

Hauptarten von Promises in Node.js:

  • Grundlegendes Promise: Es ist ein Container für zukünftige Werte oder Fehler. Es hat drei Zustände: pending (ausstehend), fulfilled (erfüllt), rejected (abgelehnt). Wird mit dem Konstruktor new Promise() erstellt.

    // Erstellen eines grundlegenden Promises
    const myPromise = new Promise((resolve, reject) => {
      // Asynchrone Operation
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("Operation erfolgreich abgeschlossen");
        } else {
          reject("Ein Fehler ist aufgetreten");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Erstellt ein Promise, das sofort in den Zustand fulfilled mit einem gegebenen Wert übergeht.

    // Erstellen eines resolved Promises
    const resolvedPromise = Promise.resolve("Dies ist bereits ein erfülltes Promise");
    
  • Promise.reject(): Erstellt ein Promise, das sofort in den Zustand rejected mit einem Fehlergrund übergeht.

    // Erstellen eines rejected Promises
    const rejectedPromise = Promise.reject(new Error("Dies ist ein abgelehntes Promise"));
    
  • Promise.all(): Nimmt ein Array von Promises und gibt ein neues Promise zurück. Es geht in den Zustand fulfilled, wenn alle Promises im Array erfolgreich abgeschlossen sind. Der Wert ist ein Array der Ergebnisse in der gleichen Reihenfolge wie die Eingabepromises. Wenn irgendein Promise abgelehnt wird, wird Promise.all() sofort abgelehnt mit dem Grund des ersten abgelehnten Promises.

    // Verwendung von Promise.all()
    const promise1 = Promise.resolve(1);
    const promise2 = Promise.resolve(2);
    const promise3 = new Promise((resolve, reject) => setTimeout(() => resolve(3), 100));
    Promise.all([promise1, promise2, promise3])
      .then((values) => {
        // values wird [1, 2, 3]
      })
      .catch((error) => {
        // Fehlerbehandlung
      });
    
  • Promise.allSettled(): Nimmt ein Array von Promises und gibt ein neues Promise zurück. Es geht in den Zustand fulfilled, wenn alle Promises im Array abgeschlossen sind, entweder erfolgreich (fulfilled) oder abgelehnt (rejected). Der Wert ist ein Array von Objekten, die das Ergebnis jeder Promise beschreiben (Status und Wert/Grund). Im Gegensatz zu Promise.all() wird es nicht sofort abgelehnt.

    // Verwendung von Promise.allSettled()
    const promiseA = Promise.resolve("Erfolg");
    const promiseB = Promise.reject("Fehler");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results ist ein Array von Objekten:
        // [{status: 'fulfilled', value: 'Erfolg'}, {status: 'rejected', reason: 'Fehler'}]
      });
    
  • Promise.race(): Nimmt ein Array von Promises und gibt ein neues Promise zurück. Es geht in den Zustand fulfilled oder rejected mit dem Ergebnis/Grund der ersten Promise im Array, die entweder erfolgreich abgeschlossen oder abgelehnt wurde.

    // Verwendung von Promise.race()
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Ich bin schnell!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Ich bin langsam..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value wird "Ich bin schnell!"
      });
    
  • Promise.any(): Nimmt ein Array von Promises und gibt ein neues Promise zurück. Es geht in den Zustand fulfilled mit dem Wert der ersten Promise, die erfolgreich abgeschlossen wurde. Wenn alle Promises abgelehnt werden, gibt Promise.any() einen Fehler AggregateError zurück, der die Gründe aller abgelehnten Promises enthält. Verfügbar ab Node.js 12.

    // Verwendung von Promise.any()
    const promiseFail1 = Promise.reject("Fehler 1");
    const promiseSuccess = Promise.resolve("Erfolg!");
    const promiseFail2 = Promise.reject("Fehler 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value wird "Erfolg!"
      })
      .catch((error) => {
        // Behandlung von AggregateError, wenn alle Promises abgelehnt werden
      });