Autres conseils

Étant donné que cette question a encore beaucoup de points de vue (comme le mien) je voulais signaler que:

  1. nœud promesse semble plutôt mort pour moi (dernière livraison était il y a environ 1 an) et contient presque pas de tests.
  2. à terme regarde module très gonflé pour moi et est mal documenté (et je pense que les conventions de nommage sont tout simplement mauvais)
  3. La meilleure façon d'aller semble être le cadre q , qui est à la fois actif et bien documenté.

Une promesse est une « chose » qui représente les résultats « éventuels » d'une opération pour ainsi dire. Le point à noter ici est que, il fait abstraction des détails de quand quelque chose se passe et vous permet de vous concentrer sur ce qui devrait arriver après que quelque chose arrive. Cela se traduira par un code propre, maintenable où au lieu d'avoir un rappel à l'intérieur d'un rappel dans un rappel, votre code ressemblera un peu comme:

 var request = new Promise(function(resolve, reject) {
   //do an ajax call here. or a database request or whatever.
   //depending on its results, either call resolve(value) or reject(error)
   //where value is the thing which the operation's successful execution returns and
   //error is the thing which the operation's failure returns.
 });

 request.then(function successHandler(result) {
   //do something with the result
 }, function failureHandler(error) {
  //handle
 });

Les états spécifications de promesses que d'une promesse

then

méthode doit renvoyer une nouvelle promesse qui est remplie lorsque le successHandler donné ou le rappel de failureHandler est terminé. Cela signifie que vous pouvez enchaîner ensemble promesses lorsque vous avez un ensemble de tâches asynchrones qui doivent être exécutés et être assuré que l'enchaînement des opérations est garanti comme si vous aviez utilisé callbacks. Ainsi, au lieu de passer un rappel à l'intérieur d'un rappel dans un rappel, le code avec des promesses enchaînées ressemble à:

var doStuff = firstAsyncFunction(url) {
                return new Promise(function(resolve, reject) {
                       $.ajax({
                        url: url,
                        success: function(data) {
                            resolve(data);
                        },
                        error: function(err) {
                             reject(err); 
                        } 
                  });
               };
doStuff
  .then(secondAsyncFunction) //returns a promise
  .then(thirdAsyncFunction); //returns a promise

Pour en savoir plus sur les promesses et pourquoi ils sont super cool, le blog de la caisse Domenic: http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/

nouveau tutoriel sur les promesses de l'auteur de PouchDB est probablement le meilleur que j'aie jamais vu. Il couvre à bon escient les erreurs de débutant classiques vous montrant des modèles d'utilisation correcte et même quelques anti-modèles qui sont encore couramment utilisés - même dans d'autres tutoriels !!

Amusez-vous!

PS je ne répondais pas d'autres parties de cette question car ils ont été bien couverts par d'autres.

Mike Taulty a une série de vidéos , chacun d'entre eux de moins de dix minutes, décrivant le fonctionnement de la bibliothèque Promise WinJS.

Ces vidéos sont très instructif, et Mike parvient à montrer la puissance de l'API Promise avec quelques exemples de code bien choisi.

var twitterUrl = "http://search.twitter.com/search.json?q=windows";
var promise = WinJS.xhr({ url: twitterUrl });

 promise = promise.then(
     function (xhr) {
     },
     function (xhr) {
         // handle error
     });

Le traitement de la façon dont les exceptions sont traitées est particulièrement bonne.

Malgré les références WinJS, c'est une série vidéo d'intérêt général, car l'API Promise est largement similaire à travers ses nombreuses réalisations.

RSVP est un poids léger mise en œuvre Promesse qui passe la Promesse / A + Test suite. Je aime bien l'API, car elle est similaire dans le style de l'interface WinJS.

Mise à jour Apr-2014

Par ailleurs, la bibliothèque WinJS est maintenant open source.

Un autre avantage de promesses est que la gestion des erreurs et lancer d'exception et la capture est beaucoup mieux que d'essayer de gérer cela avec callbacks.

Bluebird bibliothèque implémente des promesses et vous donne de grandes traces à long pile, est très rapide, et met en garde contre les erreurs non interceptées. Il est également plus rapide et utilise moins de mémoire que les autres bibliothèques de promesse, selon http://bluebirdjs.com/docs /benchmarks.html

Qu'est-ce exactement une promesse?

Une promesse est simplement un objet qui représente le résultat d'une opération asynchrone. Une promesse peut être dans l'un des 3 états suivants:

en attente :: Ceci est l'état initial, signifie la promesse est ni remplie ni rejetée.

rempli :: Cela signifie que la promesse a été remplie, signifie que la valeur représentée par la promesse est prêt à être utilisé.

rejeté :: Cela signifie que les opérations ont échoué et ne peut donc pas répondre à la promesse. En dehors des Etats, il y a trois entités importantes associées aux promesses que nous avons vraiment besoin de comprendre

  1. fonction exécuteur :: fonction exécuteur définit le fonctionnement asynchrone qui doit être effectuée et dont le résultat est représenté par la promesse. Il commence l'exécution dès que l'objet de promesse est initialisé.

  2. résolution :: résolution est un paramètre transmis à la fonction d'exécuteur testamentaire, et dans le cas où l'exécuteur exécute avec succès alors cette résolution est appelée avec le résultat.

  3. rejeter :: rejeter est un autre paramètre passé à la fonction d'exécuteur testamentaire, et il est utilisé lorsque la fonction exécuteur testamentaire échoue. La raison de l'échec peut être transmis au Rejeter.

Alors chaque fois que nous créons un objet promesse, nous avons à fournir Exécuteur, Resolve et Rejeter.

Référence :: Promesses

J'ai été aussi à la recherche en promesses dans Node.js récemment. À ce jour when.js semble être la voie à suivre en raison de son utilisation de la vitesse et des ressources, mais la documentation sur q.js m'a donné beaucoup mieux comprendre. Il faut donc utiliser when.js mais les q.js docs pour comprendre le sujet.

De la q.js readme sur github:

  

Si une fonction ne peut pas retourner une valeur ou lancer une exception sans   le blocage, il peut retourner une promesse à la place. Une promesse est un objet   représente la valeur de retour ou de l'exception levée que la fonction   peut éventuellement fournir. Une promesse peut également être utilisé comme proxy pour un   objet à distance pour surmonter la latence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top