En raison du mécanisme asynchrone de JavaScript, un problème courant est la pyramide de rappel :
loadImg('a.jpg', function() { loadImg('b.jpg', function() { loadImg('c.jpg', function() { console.log('all done!'); }); }); });
Promise Littéralement, promesse. Si A appelle B et que B renvoie une promesse à A, alors A peut écrire le plan comme ceci : Lorsque B me renvoie le résultat, A exécute le plan S1. Sinon, si B ne donne pas à A le résultat qu'il souhaite pour certains. raison, alors A exécute le plan d'urgence S2. Dans ce cas, tous les risques potentiels sont sous le contrôle de A
var resB = B(); var runA = function(){ resB.then(execS1,execS2); };
Si A veut terminer quelque chose, il ne peut pas compter sur une réponse de B, alors le code ci-dessus changera. Cheng
var resB = B(); var resC = C(); ... var runA = function() { reqB .then(resC, execS2) .then(resD, execS3) .then(resE, execS4) ... .then(execS1); }; runA();
Ici, chaque fois qu'un interrogateur donne une réponse inattendue, un mécanisme de traitement différent est utilisé, bien que la spécification Promise ne l'exige pas, et même aucun traitement n'est requis, c'est-à-dire (Ne pas passer). dans le deuxième paramètre de then), ou la gérer uniformément
Une promesse peut avoir trois états : en attente( en attente), complété(exécuté), rejeté(rejeté)
Le statut d'une Promesse ne peut changer que de "en attente" "Aller à "Complete" ou "Reject", ne peut pas être inversé
La promesse doit implémenter la méthode then, (then est le cœur de la promesse), puis doit renvoyer un promesse, la même promesse peut alors être appelée plusieurs fois et les rappels sont exécutés dans le même ordre que celui dans lequel ils sont définis.
La méthode then accepte deux paramètres. Le premier paramètre est un rappel en cas de succès, et l'autre est un rappel en cas d'échec. Then peut accepter une autre promesse transmise et accepte également un ". class then" objet ou méthode, c'est-à-dire un objet puisable
peut faire référence à cet article Les promesses JavaScript de html5rocks. Actuellement, les navigateurs avancés tels que Chrome et Firefox a L'objet Promise a été intégré, fournissant plus d'interfaces d'opération, telles que Promise.all()
, qui prend en charge la transmission d'un tableau de promesses, puis est exécuté lorsque toutes les promesses sont terminées. capture d'exceptions conviviale et puissante à gérer. Cela devrait suffire pour la programmation asynchrone quotidienne.
La plupart des bibliothèques js populaires aujourd'hui implémentent Promise à des degrés divers, comme dojo, jQuery, Zepto, when.js, Q, etc., mais elles ne sont exposés que La plupart de ce qui sort sont des objets Deferred
,
Nous voyons que peu importe la complexité de l'implémentation de Promise, son utilisation est très simple et le code organisé C'est très clair. Désormais, ce n'est plus nécessaire. Je suis torturé par les rappels.
Enfin, les promesses sont si élégantes ! Mais Promise ne résout que le problème de l'imbrication profonde des rappels. Ce qui simplifie vraiment la programmation asynchrone JavaScript, c'est Generator. Du côté de Node.js, il est recommandé d'envisager Generator.
Tutoriel recommandé : "Tutoriel JS"
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!