Ein Versprechen in JavaScript ist wie ein „Versprechen“, das Sie machen, etwas in der Zukunft zu tun. Es handelt sich um ein Objekt, das den eventuellen Abschluss (oder Fehler) einer asynchronen Aufgabe und den daraus resultierenden Wert darstellt. Einfach ausgedrückt fungiert ein Versprechen als Platzhalter für einen Wert, der noch nicht verfügbar ist, aber in Zukunft verfügbar sein wird.
Versprechen können in einem von drei Zuständen bestehen:
Ein Promise wird mit dem Promise-Konstruktor erstellt, der zwei Parameter benötigt: Auflösung und Ablehnung – beides sind Funktionen.
Wenn der asynchrone Vorgang erfolgreich ist, rufen Sie die Auflösungsfunktion auf, um das Versprechen zu erfüllen.
Wenn etwas schief geht, rufen Sie die Ablehnungsfunktion auf, um anzuzeigen, dass das Versprechen aufgrund eines Fehlers abgelehnt wurde.
Sie können das Ergebnis eines Versprechens mit .then() für den Erfolg und .catch() für die Fehlerbehandlung verarbeiten.
Beispiel: Ein Versprechen erstellen und einlösen
const fetchData = new Promise((resolve, reject) => { // Simulate an asynchronous task like fetching data from a server setTimeout(() => { const data = "Some data from the server"; // Simulate success and resolve the promise resolve(data); // You can also simulate an error by rejecting the promise // reject(new Error("Failed to fetch data")); }, 1000); }); // Consuming the Promise fetchData .then((data) => { console.log("Data fetched:", data); }) .catch((error) => { console.error("Error fetching data:", error); });
Die Auflösung (Daten) gibt die erfolgreichen Daten zurück, wenn das Versprechen erfüllt ist.
Wenn etwas schief geht, wirft „reject(error)“ einen Fehler aus, der mit .catch() behandelt werden kann.
Promise Chaining ist der Prozess der Ausführung einer Folge asynchroner Aufgaben nacheinander mithilfe von Promises. Jede .then()-Methode in der Kette wird ausgeführt, nachdem die vorherige erfüllt wurde.
Es ermöglicht Ihnen, sauberen, lesbaren Code für die Verarbeitung mehrerer asynchroner Vorgänge in einer bestimmten Reihenfolge zu schreiben. Jedes .then() kann einen Wert zurückgeben, der an das nächste .then() in der Kette übergeben wird, sodass Sie Aufgaben Schritt für Schritt erledigen können.
Beispiel: Verkettung mehrerer Versprechen
new Promise((resolve, reject) => { setTimeout(() => resolve(1), 1000); // Initial async task resolves with 1 }) .then((result) => { console.log(result); // Logs: 1 return result * 2; // Returns 2 to the next .then() }) .then((result) => { console.log(result); // Logs: 2 return result * 3; // Returns 6 to the next .then() }) .then((result) => { console.log(result); // Logs: 6 return result * 4; // Returns 24 to the next .then() });
In diesem Beispiel:
Das Versprechen beginnt damit, dass es nach 1 Sekunde mit 1 aufgelöst wird.
Jedes nachfolgende .then() empfängt das Ergebnis des vorherigen, verdoppelt oder verdreifacht es und übergibt es an das nächste .then().
Das Ergebnis wird Schritt für Schritt protokolliert: 1, 2, 6.
Fehlerbehandlung bei der Verkettung
Mit .catch() können Sie jeden Fehler in der Promise-Kette abfangen. Wenn irgendein .then() fehlschlägt, stoppt die Kette und der Fehler wird an den .catch()-Block weitergeleitet.
new Promise((resolve, reject) => { setTimeout(() => resolve(1), 1000); }) .then((result) => { console.log(result); // Logs: 1 return result * 2; }) .then((result) => { throw new Error("Oops, something went wrong!"); }) .catch((error) => { console.error("Caught error:", error.message); // Catches the error });
Promises sind ein leistungsstarkes Tool in JavaScript zur Bearbeitung asynchroner Aufgaben. Mit Promise Chaining können Sie mehrere asynchrone Vorgänge sauber, lesbar und sequenziell verwalten. Wenn Sie verstehen, wie man Promises erstellt, konsumiert und miteinander verkettet, sind Sie auf dem besten Weg, die asynchrone Programmierung in JavaScript zu meistern!
Das obige ist der detaillierte Inhalt vonVersprechen und Versprechensverkettung in JavaScript verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!