Lors de l'utilisation de la promesse.tous les()?
C'est plus conceptuel question. Je comprends la Promesse modèle de conception, mais ne pouvais pas trouver une source fiable pour répondre à ma question à propos de promise.all()
:
Ce qui est(sont) le bon scénario(s) à utiliser promise.all()
OU
Existe-il des bonnes pratiques à utiliser promise.all()
? Devrait-il être idéalement utilisé uniquement si toutes les promesses sont les objets de la même ou de types similaires?
Le seul que je pouvais penser est:
- Utilisation
promise.all()
si vous voulez résoudre la promesse seulement si tous de la promesse des objets de résoudre et de les rejeter, même si l'on rejette.
OriginalL'auteur nikjohn | 2016-07-04
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr que quelqu'un a vraiment donné l'objectif plus général d'explication pour savoir quand utiliser
Promise.all()
(et quand ne pas l'utiliser):Promise.all()
est utile quand vous avez plus d'une promesse et votre code veut savoir quand toutes les opérations que ces promesses constituent ont terminé avec succès. Il n'a pas d'importance ce que la personne des opérations asynchrones. Si ils sont asynchrones, sont représentés par des promesses et votre code veut savoir quand ils ont tous terminé, puisPromise.all()
est construit pour faire exactement cela.Par exemple, supposons que vous avez besoin de recueillir des informations à partir de trois à distance les appels d'API et quand vous avez les résultats de tous les trois appels d'API, vous devez exécuter un code supplémentaire, en utilisant tous les trois résultats. Cette situation serait parfait pour
Promise.all()
. Vous pourriez donc quelque chose comme ceci:Promise.all()
est probablement les plus couramment utilisées avec les mêmes types de demandes (comme dans l'exemple ci-dessus), mais il n'y a pas de raison qu'il doit être. Si vous avez eu un autre cas où vous avez besoin de faire une demande d'API distante, lecture d'un fichier local et de lire un local de la sonde de température et puis, quand vous aviez des données provenant des trois opérations asynchrones, vous avez voulu puis faire un peu de traitement avec les données de tous les trois, vous souhaitez à nouveau utiliserPromise.all()
:Sur le revers de la médaille, si vous n'avez pas besoin de se coordonner entre eux et, juste de la poignée de chaque opération asynchrone individuellement, alors vous n'avez pas besoin
Promise.all()
. Vous pouvez simplement le feu à chacune de vos opérations asynchrones avec leur propre.then()
gestionnaires et aucune coordination entre eux est nécessaire.En outre
Promise.all()
a ce qu'on appelle un "fast échec de la mise en œuvre". Elle renvoie d'un master promesse qui va rejeter dès que la première promesse que vous avez passé il rejette ou qu'il va résoudre lorsque toutes les promesses n'ont pas résolu. Donc, pour utiliserPromise.all()
ce type de mise en œuvre doit travailler pour votre situation. Il existe d'autres situations où vous souhaitez exécuter plusieurs opérations asynchrones et vous avez besoin de tous les résultats, même si certains d'entre eux ont échoué.Promise.all()
ne sera pas le faire pour vous. Au lieu de cela, vous utiliserez probablement quelque chose commePromise.settle()
de cette situation. Vous pouvez voir une mise en œuvre de.régler()
ici qui vous donne accès à tous les résultats, même si certains n'. Ceci est particulièrement utile lorsque vous vous attendez à ce que certaines opérations peuvent échouer et vous avez une tâche utile à poursuivre, avec les résultats provenant de toutes les opérations réussi ou vous voulez examiner les raisons de défaillance pour toutes les opérations qui ont échoué à prendre des décisions sur cette base.Comme expliqué ci-dessus, il n'a pas d'importance ce que l'individu opérations asynchrones sont ou s'ils sont du même type. Il importe seulement de savoir si votre code doit les coordonner et de savoir quand ils tout réussir.
Il est également utile de faire la liste des situations où vous n'auriez pas utilisation
Promise.all()
:.then()
gestionnaire d'une promesse et il n'y a aucune raison pourPromise.all()
.Promise.all()
ne sera pas le faire par lui-même. Vous voudrez probablement quelque chose commePromise.settle()
à la place.Promise.all()
ne peut pas suivre une opération asynchrone qui n'est pas géré par une promesse.Superbe réponse!!!
Ces paroles claires moi tout. Si vous voulez exécuter la fonction qui vous transmettre les paramètres obtenus à partir de plus d'un des appels ajax. Alors la promesse de tous est la manière correcte de le faire .
maaan cela répond était juste wow! Enseignez-vous ou quelque chose? parce que, je serai heureux d'y participer!
OriginalL'auteur jfriend00
Il est difficile de répondre à ces questions, car ils sont le type qui ont tendance à répondre eux-mêmes que l'on utilise les Api disponibles, d'une fonctionnalité du langage. Fondamentalement, c'est bien d'utiliser des Promesses façon qui convient le mieux à votre cas d'utilisation, aussi longtemps que vous évitez de leur les anti-modèles.
Toute situation dans laquelle une opération dépend de la résolution des multiples promesses.
Généralement, non et non.
OriginalL'auteur sdgluck
- Je utiliser
promise.all()
quand je dois faire des demandes pour mon API et je ne veux pas afficher quelque chose avant que l'application charge toutes les données demandées, j'ai donc retarder le flux d'exécution jusqu'à ce que j'ai toutes les données dont j'ai besoin.Exemple:
Ce que je veux faire je veux charger les utilisateurs de mon application et de leurs produits (imaginez que vous avez à faire des demandes multiples) avant d'afficher un tableau dans mon application avec l'utilisateur e-mails et les noms de produit de chaque utilisateur.
Ce que je vais faire - je envoyer les demandes à mon API de la création de l'promesses et à l'aide de
promise.all()
Ce que je fais lorsque toutes les données ont été chargées une Fois que les données arrivent sur mon application, je peux exécuter la fonction de rappel de
promises.all()
et ensuite faire voir la table avec les utilisateurs.J'espère que cela vous aidera à voir dans le scénario qui a du sens pour utiliser
promises.all()
OriginalL'auteur miquelarranz
Promise.all
est d'attendre pour plusieurs Promesses de résoudre en parallèle (en même temps). Elle renvoie une Promesse qui se résout lorsque toutes les entrées les Promesses n'ont pas résolu:Si tout de l'entrée des Promesses est rejetée, la Promesse retourné par
Promise.all
est également rejeté.Un scénario commun est d'attendre plusieurs requêtes à l'API pour finir de sorte que vous pouvez combiner leurs résultats:
Vous pouvez utiliser
Promise.all
avecPromise
instance.OriginalL'auteur joews
J'ai tendance à utiliser promesse à tous pour quelque chose comme ceci:
Ici, pour chaque utilisateur, nous allons off d'accéder à leur profil. Je ne veux pas que ma promesse de la chaîne de sortir de la main, maintenant que j'ai
x
montant des promesses de résoudre.Donc
Promise.all()
va regrouper tous mes promesses de retour dans un, et je peux gérer que par le biais de la prochainethen
. Je peux continuer à faire cela pour aussi longtemps qu'un, comme, par exemple, pour chaque profil, je veux obtenir les paramètres relatifs etc. etc. Chaque fois que je créer des tonnes de nouvelles promesses, je peux les regrouper tous dans un.OriginalL'auteur Callum Linington
Promesse.tous-Cette méthode est utile lorsque vous voulez attendre plus d'une promesse de la compléter ou de La Promesse.tous(itératif) méthode renvoie une promesse qui résout lorsque toutes les promesses de l'itérable argument est résolu, ou rejette avec la raison de la première passé promesse qui le rejette.
2.Utilisez simplement la Promesse.tous(les fichiers).catch(err => { })
Cela déclenche une erreur si l'une des promesses sont rejetés.
3.Utiliser .réfléchir sur les promesses de l'avant .si vous voulez attendre pour tous
les promesses de rejeter ou de s'acquitter de
OriginalL'auteur Nancy thakkar
Promise.all
passe un tableau de valeurs à partir de toutes les promesses dans l'itérable objet qu'elle a été adoptée.https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
vous pouvez essayer une autre affaire en faisant
isCallFailed = true
.OriginalL'auteur Venky
Si vous êtes intéressé Promesse.tous, alors, lisez ci-dessous Promesse.tous les
Promesse (habituellement, ils sont appelés "Promesse") - fournir un moyen pratique d'organiser le code asynchrone.
Promesse est un objet spécial qui contient votre état. D'abord, dans l'attente ( «en attente"), puis un de: remplies ( «réussi") ou refusé ( «terminé avec erreur").
Sur la promesse d'accrocher les rappels peuvent être de deux types:
avec succès".
La syntaxe pour la création de la Promesse:
De méthode universelle pour accrocher des gestionnaires:
onFulfilled - une fonction qui sera appelée avec le résultat avec
résoudre.
onRejected - une fonction qui sera appelée lorsqu'une erreur de rejeter.
Avec son aide vous pouvez affecter à la fois le gestionnaire d'une fois, et une seule:
Synchrone jetez - la même qui rejettent
Promisification
Promisification - Lors de la prise asynchrone fonctionnalités et d'en faire un wrapper pour le retour PROMIS.
Après Promisification utilisation fonctionnelle devient souvent beaucoup plus pratique.
Comme un exemple, faire un wrapper pour l'utilisation de XMLHttpRequest demandes
httpGet la fonction url () retournera PROMIS, lors du chargement des données avec l'url va aller dans l'remplies avec ces données, et en cas d'erreur dans rejetée avec une erreur de l'information:
Comme vous pouvez le voir, à l'intérieur de la fonction objet XMLHttpRequest est créé et envoyé comme d'habitude, quand onload /onerror sont appelées, respectivement, résoudre (200) ou de le rejeter.
À l'aide de:
L'exécution en parallèle
Que si nous voulons mettre en œuvre plusieurs processus asynchrones simultanément et de leurs résultats?
La Promesse de classe a les méthodes statiques suivantes.
Promesse.tous(itératif)
Appel Promesse.tous (itératif) reçoit un tableau (ou autre objet itérable) et les rendements PROMIS, PROMIS, qui attend jusqu'à ce que tous transférés PROMIS terminé, et les changements de l'état "terminé" avec un tableau de résultats.
Par exemple:
Disons que nous avons un tableau d'URL.
Pour téléchargement en parallèle, vous devez:
Nous obtenons ceci:
'use strict';
Noter que si l'un de Promesse s'est terminée avec une erreur, le résultat sera
Promesse.tous cette erreur.
En même temps que le reste de PROMIS ignoré.
Par exemple:
Au total:
résultat (le cas échéant), et les rappels.
argument démarre automatiquement, ce qui devrait appeler à résoudre (suite)
succès, et de rejeter (erreur) - erreur.
est passé, à des gestionnaires sur cette Promesse.
https://www.promisejs.org/patterns/
Promise.all
... qui est ce que la question posée sur l'.Oui, merci de lire jusqu'à la fin
Quentin lire en commençant par l'exécution en Parallèle
Vous avez apprécié moi quand je suis entré dans le texte en plusieurs parties.Parce que quand j'ai essayé d'entrer le poids du texte, j'ai eu un problème
J'espère que les experts apprécieront ma réponse
OriginalL'auteur Vanya Avchyan