Résolvez que la fonction de rappel est trop profonde et que la logique parallèle doit être exécutée en série. Une promesse représente le résultat final d'une opération asynchrone. La principale façon d'interagir avec la promesse est d'enregistrer la fonction de rappel via sa méthode alors () pour recevoir la valeur finale du résultat de la promesse.
Les protocoles liés aux promesses comprennent la promesse et les promesses +
Définir une promesse de classe
Définissez la file d'attente d'attribut, initialisez le tableau vide []
Définissez la valeur de la valeur de la propriété, initialisez null
Définissez l'état de l'état de la propriété et initialisez "en attente" (valeur par défaut)
Définir la méthode des membres getqueue (), retour d'attribut la file d'attente
Définir la méthode des membres getStatus (), renvoie le statut d'attribut
Définir la méthode des membres setStatus (), définir l'état, les paramètres de passage: statut, valeur
Déterminer que l'état est rempli ou rejeté,
Définir la propriété de statut this.status = statut
Définissez la propriété de valeur this.value = valeur || nul, si vous ne transmettez pas la valeur, c'est nul
Définir le Freeze Variable FreezeObject
Définir la méthode des membres ISFulfilled () pour déterminer si l'état actuel est (terminé)
Définir la méthode des membres est rejeté () pour déterminer si l'état actuel est (échoué)
Définir la méthode des membres isPending (), déterminer le maître d'état actuel est (en attente)
Définir la méthode des membres puis (), passer paramètres: rappel réussi à succès, rappel raté à la réjection
Définissez deux fonctions de rappel: objet de gestionnaire, attribut accompli, rejeté
Définissez la propriété différée de l'objet de gestionnaire, l'objet différé
Déterminez si l'état actuel attend. S'il attend, placez l'objet de gestionnaire dans le tableau de file d'attente de file d'attente
S'il ne s'agit pas d'un état d'attente, appelez la méthode de procédure () de l'objet utils, paramètre: statut,
Return handler.deferred.promise objet
Définir une classe différée
Définissez la promesse d'attribut et initialisez l'objet Promise
Définissez la méthode des membres résoudre (), passez le paramètre: résultat résultat
Déterminez l'état de l'objet Promise comme attendant et retournez directement
Appelez la méthode getqueue () de l'objet Promise pour obtenir le tableau de file d'attente
Tableau de boucle
// Todo appelle les utils de la classe d'outils. Méthode de procédure (), paramètres: "épanoui", élément, information erreuse
Appelez la méthode SetStatus () de l'objet Promise, définissez l'état, paramètres: «FAILLÉ», RÉSULTAT
Définir la méthode des membres Rejeter, passer le paramètre: Message d'erreur d'erreur
Déterminez l'état de l'objet Promise comme attendant et retournez directement
Appelez la méthode getqueue () de l'objet Promise pour obtenir le tableau de file d'attente
Tableau de boucle
// TODO, appelez les utils de la classe d'outils. Méthode de procédure (), paramètres: "rejeté", élément, information erreuse
Appelez la méthode SetStatus () de l'objet Promise, définissez l'état, paramètres: «FAILLÉ», RÉSULTAT
Définissez les utilisations de la classe d'outils, exécutez-la immédiatement à l'aide de fonctions anonymes et obtenez un objet
Renvoie l'objet, il y a une procédure de méthode () dans l'objet
Définissez la méthode de la procédure (), paramètres de réussite: type de type d'état, tableau du processeur de gestionnaire, résultat résultat
Obtenez la fonction de traitement Func, dans Handler [Type]
J'étais étourdi quand je suis arrivé ici. . .
Comment utiliser:
Définissez une fonction ajax, passez le paramètre: chemin d'URL
Obtenez l'objet différé et sortez de nouveaux
Code de l'Ajax pour demander des données, dans la méthode de rappel qui renvoie les données
Si la méthode Resolve () de l'objet différé est appelée avec succès, paramètre: données de retour
Si la méthode Reject () de l'objet différé est appelée échec, paramètre: données renvoyées
Retournez l'objet différé.
Appelez la méthode ajax () pour obtenir l'objet Promise, Paramètre: URL,
Appelez la méthode alors () de l'objet Promise, Paramètres: fonction anonyme
Appelez la méthode ajax () pour obtenir l'objet Promise et renvoyer cet objet
Former un appel à la chaîne
JS Partie:
<Script> // Promesse Code Part (J'ai choisi la ceinture de chien) promesse = function () {this.queue = []; this.value = null; this.status = 'en attente'; // en attente rejetée rejetée}; promesse.prototype.getQueue = function () {return this.queue;}; promest.prototype.getStatus = function () {return this.status;}; promesse.prototype.setstatus = fonction (s, valued) {if (s === 'a accompli' STAL {this.status = s; this.value = valeur || nul; this.queue = []; var FreezeObject = object.freeze || fonction(){}; FreeZeObject (this); // L'état de promesse est irréversible} else {lance une nouvelle erreur ({message: "ne prend pas en charge l'état:" + s}); }}; Promes promesse.prototype.isfulfild = function () {return this.status === 'FAILLIEL';}; promesse.prototype.isrejected = function () {return this.status === 'rejeté';} promest.prototype.istending = function () {return this.status === ' function (onfulfilled, onRejectEd) {var handler = {'épué': onfulfilled, 'rejetted': onrejected}; handler.deferred = new Deferred (); if (! this.ispending ()) {// Ceci est autorisé à modifier le statut de promesse d'abord, puis à ajouter des rappels utils.procedure (this.status, handler, this.value); } else {this.queue.push (gestionnaire); // peut ensuite être appelé plusieurs fois sur la même promesse; Spécification 2.2.6} return handler.deferred.promise; // doit ensuite renvoyer une promesse; spécification 2.2.7}; var utils = (function () {var kakeignaler = function (Detrered, type) {return function (résultat) {transition (Defrerred); Procédure = fonction (Type, Handler, Résultat) {var Func = Handler [Type]; newResult.then (fonction (data) {// def.Resolve (data); //}, fonction (err) {// def.reject (err); //}); // Si / quand x est accompli, réalisez la même valeur. transition (def, «rejeté», err);}} else {transition (def, type, résultat);}}; lancer une nouvelle erreur ({'message': "ne prend pas en charge le type:" + type});}}; } var queue = this.promise.getQueue (); for (var i = 0, len = queue.length; i <len; i ++) {utils.procedure ('épuré', file d'attente [i], résultat); } this.promise.setstatus ('épanoui', résultat);}; deferred.prototype.reject = function (err) {if (! this.promis.ispenseng ()) {return; } var queue = this.promise.getQueue (); for (var i = 0, len = queue.length; i <len; i ++) {utils.procedure ('rejeté', filed [i], err); } this.promise.setstatus ('rejeté', err);} / ***********************************************************************************************************************************************************************onne; var xhr = new xmlHttpRequest (); xhr.onreadystateChange = function () {if (xhr.readystate === 4) {if ((xhr.status> = 200 && xhr.status <300) || xhr.status === 304) {def.resolve (xhr.RespeSpeSt Error ({message: xhr.status})); }}}}}; xhr.open ('get', url, true); xhr.send (null); return def.promise;} ajax ('test.php? act = 1'). puis (fonction (data1) {console.log (data1); // gère les données1 return ajax ('test.php? act = 2');}). puis (fonction (data2) {console.log (data2); // gère les données 2 return ajax ('test.php? {Console.Error (err);}). alors (fonction (data3) {console.log (data3); alert ('succès');}, fonction (err) {console.error (err);}); </ script>PHP:
<? phPif ($ _ get ['act'] == 1) {echo json_encode (array ("code" => 200));} else if ($ _ get ['act'] == 2) {echo json_encode (array ("code" => 300));} elo if ($ _ get ['agir'] == 3) {echo) json_encode (array ("code" => 400));}Le résumé ci-dessus de l'apprentissage simple et de l'utilisation de JavaScript Promise est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.