Maison >interface Web >js tutoriel >Promise.all() contre plusieurs attentes : quand utiliser des appels asynchrones simultanés ou séquentiels en JavaScript ?

Promise.all() contre plusieurs attentes : quand utiliser des appels asynchrones simultanés ou séquentiels en JavaScript ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-01 22:56:15743parcourir

Promise.all() vs. Multiple Awaits: When to Use Concurrent vs. Sequential Async Calls in JavaScript?

Appels asynchrones simultanés ou séquentiels : Promise.all() contre plusieurs attentes

En JavaScript, les développeurs utilisent souvent des fonctions asynchrones pour éviter bloquer le thread principal et améliorer les performances. Deux modèles courants de gestion des tâches asynchrones utilisent Promise.all() et plusieurs instructions wait.

1. Promise.all()

Promise.all([promise1, promise2, ...]) prend un tableau de promesses et renvoie une nouvelle promesse qui se résout lorsque toutes les promesses d'entrée sont réglées (soit résolues ou rejeté). Cela vous permet d'attendre que plusieurs opérations asynchrones se terminent simultanément.

2. Attentes multiples

L'utilisation de plusieurs instructions wait vous permet d'attendre des opérations asynchrones les unes après les autres. Cela sérialise efficacement les opérations, en les exécutant séquentiellement.

Différences de timing

La principale différence entre Promise.all() et plusieurs instructions wait réside dans leur timing. Promise.all() démarre toutes les opérations asynchrones simultanément, tandis que plusieurs instructions wait les exécutent une par une.

Cette différence de timing peut affecter les performances dans les scénarios où certaines opérations asynchrones prennent beaucoup plus de temps que d'autres. Dans de tels cas, l'utilisation de Promise.all() peut améliorer les performances en tirant parti de la concurrence.

Exemple

Considérez l'extrait de code suivant :

const res = (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms));

const example = async () => {
  const start = Date.now();
  const data = await Promise.all([res(3000), res(2000), res(1000)]);
  console.log(`Promise.all finished after: ${Date.now() - start}ms`);
};

example();

Lors de l'exécution de ce code, les trois opérations asynchrones (retardées de 3000, 2000 et 1 000 millisecondes, respectivement) s'exécuteront simultanément. Par conséquent, Promise.all ne sera résolu qu'une fois les trois opérations terminées et le résultat sera enregistré 3 000 millisecondes après le démarrage de la fonction.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn