Pour déclencher plusieurs opérations asynchrones simultanément, évitez d'utiliser le modèle dans lequel vous obtenez des promesses puis attendez-les séquentiellement. Au lieu de cela, exploitez la fonction Promise.all :
const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
Cette approche lance les deux opérations asynchrones simultanément et fournit les résultats dans un tableau.
Le fourni La solution exécute les opérations en parallèle, mais attend la fin de la première avant d’attendre la seconde. Bien que cela permette une exécution parallèle, cela introduit des problèmes dans la gestion des promesses rejetées.
Si la première promesse prend plus de temps à se terminer et que la seconde échoue, Promise.all échouera immédiatement, empêchant le rejet de la première promesse. Cela peut entraîner une erreur de rejet non gérée.
Actuellement, il n'existe pas de syntaxe d'attente désignée pour l'attente parallèle, d'où l'alternative d'utiliser Promise.all. Des discussions ont émergé concernant wait.all, indiquant la possibilité d'améliorations futures.
Considérez l'exemple suivant, où getValue1Async prend 500 ms pour être résolu et getValue2Async prend 100 ms pour rejeter :
Séquentiel Exécution :
async () => { try { const value1 = await getValue1Async(); const value2 = await getValue2Async(); } catch (e) { console.error(e); } };
Exécution simultanée avec Promise.all :
async () => { try { const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]); } catch (e) { console.timeEnd("Promise.all", e); } };
Sortie :
Conclusion :
L'utilisation de Promise.all permet efficacement l'exécution parallèle d'opérations asynchrones et garantit une gestion appropriée des promesses rejetées.
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!