Maison >interface Web >js tutoriel >Comment puis-je gérer toutes les promesses, y compris celles rejetées, en JavaScript asynchrone ?
Dans la programmation asynchrone, gérer les promesses peut présenter des défis lorsque certaines tâches échouent. Considérons le scénario suivant :
const arr = [fetch('index.html'), fetch('http://does-not-exist')]; Promise.all(arr) .then(res => console.log('success', res)) .catch(err => console.log('error', err)); // This is executed
Le code ci-dessus effectue des requêtes réseau à l'aide de fetch. Cependant, comme Promise.all rejettera dès la première requête ayant échoué, nous rencontrons un problème : comment pouvons-nous gérer les résultats de toutes les tâches, même celles qui ont échoué ?
Pour pour résoudre ce problème, nous pouvons utiliser les techniques JavaScript natives suivantes :
const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" }));
Cette fonction de réflexion renvoie une nouvelle promesse qui se résout en un objet contenant soit la valeur résolue, soit le motif du rejet, ainsi qu'une propriété d'état indiquant l'état de la promesse.
var arr = [fetch('index.html'), fetch('http://does-not-exist')]; Promise.all(arr.map(reflect)).then(function(results){ var success = results.filter(x => x.status === "fulfilled"); });
Dans cet exemple, nous appliquons la réflexion à chaque promesse du tableau. Le tableau résultant contient désormais un objet avec des propriétés d'état et d'erreur ou de valeur pour chaque requête.
Pour une solution moderne, envisagez d'utiliser le Promise.allSettled intégré :
Promise.allSettled([promise]).then(([result]) => { // Code will execute regardless of the promise's state // { status: "fulfilled", value: 33 } });
Cette méthode constitue un moyen pratique de gérer toutes les promesses réglées, quel que soit leur résultat.
Par en tirant parti de ces techniques, vous pouvez gérer gracieusement les opérations asynchrones et accéder aux résultats de toutes les promesses, même celles qui échouent, vous permettant de prendre des décisions éclairées basées sur les données disponibles.
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!