Maison >interface Web >js tutoriel >Types de promesses en JavaScript
Pardonnez-moi pour les fautes de frappe et de grammaire, j'apprends encore. ?
Les promesses sont un moyen de gérer les opérations asynchrones en JavaScript. Ils représentent une valeur qui peut être disponible maintenant, ou dans le futur, ou jamais. Les promesses ont trois états : en attente, remplies et rejetées.
En attente : L'état initial d'une promesse. Cela signifie que l'opération est toujours en cours et n'est pas encore terminée.
Réalisé : L'état d'une promesse lorsque l'opération a été terminée avec succès. La promesse a une valeur et elle peut être utilisée.
Rejeté : L'état d'une promesse lorsque l'opération a échoué. La promesse a une raison pour l'échec, et elle peut être gérée à l'aide de la méthode catch.
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));
Une promesse qui résout ou rejette souvent utilisée pour les appels d'API ou les tâches asynchrones.
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));
Attend que toutes les promesses se résolvent, si l'une d'elles échoue, toute la chaîne échoue. Idéal pour plusieurs tâches asynchrones qui doivent être résolues ensemble.
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));
Le problème avec Promise.all est que si une promesse échoue, toute la chaîne échoue. Pour éviter cela, vous pouvez utiliser Promise.allSettled.
const 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 attend que toutes les promesses soient réglées, qu'elles soient résolues ou rejetées. Il renvoie un tableau d'objets avec un statut et une valeur ou une raison.
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));
Renvoie le résultat de la première promesse de règlement, qu'elle soit résolue ou rejetée. Utile lorsque vous avez besoin de rapidité, comme par exemple pour charger la première réponse disponible.
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));
Si la première promesse échoue, toute la chaîne échoue. Pour éviter cela, vous pouvez utiliser Promise.any.
const 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));
Résout lorsqu'une promesse est résolue. Ignore tous les rejets jusqu'à ce que toutes les promesses soient rejetées. Utile lorsque vous avez besoin du premier résultat réussi, quel que soit le reste.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!