Verzeihen Sie mir die Tipp- und Grammatikfehler, ich lerne immer noch. ?
Versprechen sind eine Möglichkeit, asynchrone Vorgänge in JavaScript abzuwickeln. Sie stellen einen Wert dar, der jetzt, in der Zukunft oder nie verfügbar sein kann. Versprechen haben drei Zustände: ausstehend, erfüllt und abgelehnt.
Ausstehend: Der Anfangszustand eines Versprechens. Es bedeutet, dass der Vorgang noch läuft und noch nicht abgeschlossen ist.
Erfüllt: Der Zustand eines Versprechens, wenn der Vorgang erfolgreich abgeschlossen wurde. Das Versprechen hat einen Wert und kann genutzt werden.
Abgelehnt: Der Status eines Versprechens, wenn der Vorgang fehlgeschlagen ist. Das Versprechen hat einen Grund für das Scheitern und kann mit der Catch-Methode behandelt werden.
const promise = new Promise((resolve, reject) => { // Imagine fetching user data from an API const user = { name: "Aasim Ashraf", age: 21, }; user ? resolve(user) : reject("User not found"); }); promise .then((user) => console.log(user)) .catch((error) => console.log(error));
Ein Versprechen, das häufig für API-Aufrufe oder asynchrone Aufgaben verwendet wird.
const fetchUser = fetch("/users").then((res) => res.json()); const fetchPosts = fetch("/posts").then((res) => res.json()); Promise.all([fetchUser, fetchPosts]) .then(([user, posts]) => { console.log(user, posts); }) .catch((error) => console.log(error));
Wartet darauf, dass alle Versprechen eingelöst werden. Wenn eines scheitert, scheitert die gesamte Kette. Am besten für mehrere asynchrone Aufgaben geeignet, die gemeinsam gelöst werden müssen.
const fetchUser = fetch("/users").then((res) => res.json()); const fetchPosts = fetch("/posts").then((res) => res.json()); Promise.all([fetchUser, fetchPosts]) .then(([user, posts]) => { console.log(user, posts); }) .catch((error) => console.log(error));
Das Problem bei Promise.all besteht darin, dass die gesamte Kette scheitert, wenn ein Versprechen fehlschlägt. Um dies zu vermeiden, können Sie Promise.allSettled.
verwendenconst fetchUser = fetch("/users").then((res) => res.json()); const fetchPosts = fetch("/posts").then((res) => res.json()); Promise.allSettled([fetchUser, fetchPosts]) .then((results) => { results.forEach((result) => { if (result.status === "fulfilled") { console.log("User Data:", result.value); } else { console.log("Error:", result.reason); } }); });
Promise.allSettled wartet darauf, dass alle Versprechen erfüllt werden, unabhängig davon, ob sie gelöst oder abgelehnt werden. Es gibt ein Array von Objekten mit einem Status und einem Wert oder Grund zurück.
const fast = new Promise(resolve => setTimeout(resolve, 1000, "Fast")); const slow = new Promise(resolve => setTimeout(resolve, 2000, "Slow")); Promise.race([fast, slow]) .then((result) => { console.log(result); }) .catch((error) => console.log(error));
Gibt das Ergebnis des ersten Abwicklungsversprechens zurück, unabhängig davon, ob es gelöst oder abgelehnt wurde. Nützlich, wenn Sie Geschwindigkeit benötigen, z. B. beim Laden der ersten verfügbaren Antwort.
const error = new Promise((resolve) => { setTimeout(() => resolve("Error"), 1000); }); const success = new Promise((resolve) => { setTimeout(() => resolve("Success"), 2000); }); Promise.race([error, success]) .then((result) => { console.log(result); }) .catch((error) => console.log("First Rejected",error));
Wenn das erste Versprechen scheitert, scheitert die gesamte Kette. Um dies zu vermeiden, können Sie Promise.any.
verwendenconst promise1 = Promise.reject("Error 1"); const promise2 = new Promise(resolve => setTimeout(resolve, 3000, "Promise 2")); Promise.any([promise1, promise2]) .then((result) => { console.log("First Success",result); }) .catch((error) => console.log("All Rejected",error));
Wird aufgelöst, wenn ein Versprechen gelöst wird. Ignoriert alle Ablehnungen, bis alle Versprechen abgelehnt sind. Nützlich, wenn Sie unabhängig vom Rest das erste erfolgreiche Ergebnis benötigen.
Das obige ist der detaillierte Inhalt vonArten von Versprechen in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!