Maison >interface Web >js tutoriel >Polyfills de Promise.all()
Entrée : il faut un tableau de promesse (pas nécessaire)
Sortie : il renvoie une promesse qui contient un tableau de résultats de toutes les promesses de succès.
Remarque : si une promesse échoue, elle est immédiatement rejetée.
`
Promise.myAll = fonction (promesses) {
retourner une nouvelle promesse (fonction (résoudre, rejeter) {
// Vérifiez si l'entrée est un tableau
if (!Array.isArray(promises)) {
return rejet(new TypeError("L'argument doit être un tableau"));
>
let results = []; let completedPromises = 0; promises.forEach(function (promise, index) { // Use Promise.resolve to handle non-promise values Promise.resolve(promise) .then(function (value) { results[index] = value; completedPromises += 1; // If all promises are resolved if (completedPromises === promises.length) { resolve(results); } }) .catch(function (error) { reject(error); // Reject if any promise fails }); }); // Handle case with empty array of promises if (promises.length === 0) { resolve([]); }
});
};
`
. Toutes les promesses sont résolues et leurs résultats sont stockés dans le tableau des résultats.
. Lorsque le nombre de promesses résolues est égal à la longueur du tableau d'entrée, la promesse externe se résout avec le tableau de résultats.
. Il n'est pas nécessaire que dans un tableau de promesses, toute valeur doive être une promesse, elle peut être n'importe quelle valeur - nombre, chaîne ou toute fonction de synchronisation.
Si la valeur transmise est déjà une promesse - Elle renverra la même promesse, garantissant qu'aucun emballage ou modification supplémentaire ne se produira.
Si la valeur transmise n'est pas une promesse - Elle enveloppera la valeur dans une promesse résolue, permettant de la traiter comme une promesse et de la gérer avec .then()
Pour qu'il soit résolu avec une valeur, si nous utilisons le rejet, il sera capturé dans le bloc catch avec une valeur considérée comme une erreur.
Si vous avez encore des questions, n'hésitez pas à les poser dans les commentaires !
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!