La nouvelle norme ajoute une promesse native.
Ici, nous ne discuterons que de l'utilisation des chaînes et de la réflexion sur les détails.
1. Revue de Then () et Catch ()
La fonction de rappel peut être placée dans les paramètres de alors () et catch () pour recevoir le résultat final d'une promesse.
Alors () peut recevoir un paramètre, alors ce rappel ne sera appelé que lorsque Promise Resolve ().
Alors () peut également recevoir un deuxième paramètre, et le deuxième rappel est utilisé pour gérer la situation de promesse Reject ().
Catch () gère spécifiquement la situation prometteur rejet ().
En d'autres termes, alors () peut être utilisé dans les deux sens, et Catch () ne peut gérer que rejeter (). Cependant, il est recommandé d'utiliser alors () pour gérer Resolve () et Catch () pour gérer Reject ().
2. Cependant, ce dont je veux parler n'est pas ce qui précède. Ce qui précède n'est qu'un examen de l'utilisation de base. Ici, nous commencerons par les détails des valeurs de retour et de l'utilisation de la chaîne de la méthode Ensuite () et alors ().
Ensuite, la documentation officielle indique que les deux () et Catch () renvoient une promesse, ce qui est très intrigant. (Je suis un débutant en JS, et je n'ai jamais été exposé à des promesses précédentes dans la nature).
Tout d'abord, cette promesse nouvellement retournée n'est pas la promesse originale;
Deuxièmement, le changement dans l'état de la promesse nouvellement retournée (résolve () ou rejette ().) Est lié à l'état de la promesse précédente et comment alors () est utilisé.
Expliquez d'abord la situation de Then (): (la catch est similaire)
var p1 = promesse.Resolve ("Success"); var p2 = p1.Then (tâche1); var p3 = p2.Then (tâche2);Remarque: les tâches et les tâches ci-dessus sont les deux rappels.
Ici, P1 est une promesse créée et directement résoudre ();
P2 est une promesse obtenue avec alors (), et P3 est également une promesse obtenue avec alors ().
Alors, comment l'état de P2 change-t-il et qu'en est-il de P3?
Je vais utiliser la figure suivante pour expliquer ce concept:
dans,
1. Un octogone représente un objet de promesse.
2. Le cercle représente l'état à l'intérieur d'une promesse, et la flèche noire représente le changement d'état.
3. La flèche droite représente l'appel alors la fonction.
4. Autrement dit, tant que la fonction alors est appelée, un nouvel objet de promesse sera généré.
5. Lorsque vous appelez la fonction alors, ne savez pas quel est l'état de l'objet Promise précédent, qu'il soit en attente ou réglé? Cela ne peut pas être supposé et ne peut pas être vu à l'extérieur.
6. L'appel de la fonction alors ne bloquera pas, c'est-à-dire que P2 et P3 sont générés presque instantanément, même si P1 migre encore lentement son propre état.
Nous savons que l'état de P1 est résolu (voir le code ci-dessus). Cependant, il n'a pas été expliqué ici comment les états de P2 et P3 changent-il, est-il résolu ou rejeté? Regardez la nouvelle image ci-dessous.
Vous pouvez voir plus de diamants.
Le diamant représente la fonction de rappel passée lors de l'appel. Le rhombus vers le haut représente le processus de transmission dans [résolu pour l'objet de promesse précédent], et le rhombus vers le bas représente le processus de transmission dans [rejeté pour l'objet Promise précédent].
Remarque: Dans cet exemple, aucun traitement de rejet n'est passé, c'est-à-dire que le diamant vers le bas ne doit pas être dessiné dans l'image ci-dessus. Par souci de commodité, nous devons seulement savoir que le diamant ascendant et vers le bas est lié à la façon dont nous utilisons alors ou attrapez. Jetons un coup d'œil à l'exemple de code:
var p1 = promesse.resolve ("succès"); var p2 = p1.Then (tâche1); // le rhombus ascendant est généré var p3 = p2.Then (tâche2); // le rhombus ascendant est généréOn peut voir que nous ne donnons pas le deuxième paramètre de ce moment-là, c'est-à-dire que nous ne gérons pas le rejet.
Pour ajouter, si vous souhaitez gérer le rejet, vous pouvez utiliser alors ou attraper. Catch est spécialement utilisé pour gérer le rejet. En dehors de cela, il n'y a pas de différence entre alors.
1. Si l'état final de P1 (résolution ou rejet) est correctement traité (lors de l'appel, le rappel correspondant est passé, c'est-à-dire qu'il y a un diamant correspondant), alors l'état de P2 sera modifié pour résoudre.
2. Si l'état final de P1 (résolution ou rejet) n'est pas traité correctement (lors de l'appel, le rappel correspondant est manquant, c'est-à-dire qu'il n'y a pas de diamant correspondant), alors l'état de P1 sera acheminé vers P2 (l'état de réception P1).
3. Passez comme ça.
4. Cet article n'explique pas comment obtenir les dernières données finales de promesse dans le rappel, c'est-à-dire comment transmettre les données, il existe de nombreux tutoriels.
3. Voici quelques exemples pour résumer cet article.
Dans la figure, l'état de P1 est donné et résoudre ou rejeter est donné par soi-même. L'objectif est de lancer l'état final de P2 et P3.
Ce qui précède sont quatre exemples indépendants, sans lien entre eux.
X signifie que P3 n'utilise pas la fonction alors ou capture, il n'y a donc aucun moyen de gérer la résolution ou le rejet.
Enfin, s'il y a une erreur, veuillez me corriger à temps, merci! ~! ! @ ~~~
La compréhension approfondie de l'article ci-dessus de la chaîne de promesses JS est tout le contenu que j'ai partagé avec vous. J'espère que cela pourra vous donner une référence et j'espère que vous pourrez soutenir Wulin.com plus.