La compréhension des promesses node.js
De ce que j'ai compris il y a trois façons d'appeler le code asynchrone:
- Événements: par exemple.
request.on("event", callback);
- Rappels: eg.
fs.open(path, flags, mode, callback);
- Promesses
J'ai trouvé une promesse de la bibliothèque https://github.com/kriszyp/node-promise mais je ne l'obtenez pas.
Quelqu'un pourrait-il expliquer ce que sont les promesses et pourquoi je devrais utiliser?
Aussi, pourquoi était-il retiré de Node.js?
- Cet article il explique plutôt bien. Quand il s'agit d'une mise en œuvre utilisable dans node.js, prendre un coup d'oeil à Terme
- Voici une superbe série que j'ai utilisé pour créer mon propre promesse de la classe: prenons un Cadre: Promesses Voici une vidéo à propos de jQuery Différé: blog.bigbinary.com/2011/09/03/jquery-deferred.html
Vous devez vous connecter pour publier un commentaire.
Promesses node.js promis de faire un peu de travail, et d'avoir ensuite séparer les rappels qui seront exécutés pour le succès et l'échec ainsi que de la gestion des délais d'attente. Une autre façon de penser des promesses dans node.js c'est qu'ils étaient des émetteurs qui peut émettre que deux événements: la réussite et l'erreur.
La chose cool à propos de promesses est que vous pouvez les combiner dans la dépendance des chaînes (ne Promets C uniquement lorsque la Promesse d'Un et Promesse B complète).
Par leur retrait de la base node.js il a créé la possibilité de construire des modules avec différentes implémentations de promesses qui peuvent s'asseoir sur le dessus de la base. Certains de ces sont nœud-la promesse et les contrats à terme.
Depuis que cette question a encore de nombreux points de vue (comme le mien), je tenais à préciser que:
Une promesse est une "chose" qui représente le "éventuelle" des résultats d'une opération, pour ainsi dire. Le point à noter ici est que, il effectue l'abstraction des détails de quand quelque chose arrive et vous permet de vous concentrer sur ce qui doit arriver après que quelque chose se passe. Ce sera résultat en propre, maintenable code où au lieu d'avoir un rappel à l'intérieur d'un rappel à l'intérieur d'un rappel, votre code va ressembler à quelque chose comme:
Les promesses' spec états qu'une promesse de
méthode doit retourner une nouvelle promesse qui s'accomplit quand le successHandler ou la failureHandler de rappel est terminé. Cela signifie que vous pouvez à la chaîne promesses lorsque vous avez un ensemble de tâches asynchrones qui doivent être effectuées et être assuré que la séquence des opérations est garantie comme si vous aviez utilisé des rappels. Donc au lieu de passer un rappel à l'intérieur d'un rappel à l'intérieur d'un rappel, le code avec enchaîné promesses ressemble:
Pour en savoir plus sur les promesses, et pourquoi ils sont super cool, la caisse Dominique du blog : http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/
Ce nouveau tutoriel sur les Promesses de l'auteur de PouchDB est probablement le meilleur que j'ai vu n'importe où. Sagement couvre le classique erreurs de débutant vous montrer la bonne utilisation de motifs et même un peu d'anti-modèles qui sont encore couramment utilisés - même dans d'autres tutoriels!!
Profitez-en!
PS je n'ai pas la réponse à certaines autres parties de cette question, comme ils l'ont été bien couverts par les autres.
Mike Taulty a une série de vidéos, chacun d'entre eux à moins de dix minutes de long, décrivant comment la WinJS Promesse de la bibliothèque fonctionne.
Ces vidéos sont assez instructif, et Mike parvient à montrer la puissance de la Promesse de l'API avec quelques-uns bien choisis des exemples de code.
Le traitement de la façon dont les exceptions sont traitées, est particulièrement bon.
En dépit de la WinJs références, c'est un intérêt général série de vidéos, parce que la Promesse de l'API est assez similaire à travers ses nombreuses implémentations.
RSVP est un léger Promesse de mise en œuvre qui passe à la Promesse/Une+ test de suite. J'aime assez l'API, car il est similaire au style de la WinJS interface.
Mise À Jour Apr-2014
D'ailleurs, la WinJS bibliothèque est maintenant open source.
deferreds
etresolve
etdeferred.promise.then
et prédéfinition depromiseActions
dans le populaire Q documentation de la bibliothèque. À tout hasard vous connaissez quelque chose de simple pour les Node.js?Un autre avantage de promesses, c'est que des erreurs et des exceptions lancer et attraper est beaucoup mieux que d'essayer de gérer cela avec des rappels.
La bluebird bibliothèque met en œuvre des promesses et vous donne le grand long traces de la pile est très rapide, et met en garde sur les erreurs non interceptées. Il est aussi plus rapide et utilise moins de mémoire que les autres promesse de bibliothèques, selon http://bluebirdjs.com/docs/benchmarks.html
Est-ce qu'une Promesse ?
Une promesse est tout simplement un objet qui représente le résultat d'une opération asynchrone. Une promesse peut être dans l'une de ces 3 états :
en attendant :: C'est l'état initial, signifie la promesse n'est ni satisfait, ni rejetée.
remplies :: Cela signifie que la promesse a été accomplie, s'entend de 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 s'acquitter de la promesse.
À part les états, il y a trois entités importantes associées à des promesses dont nous avons vraiment besoin de comprendre
exécuteur de la fonction :: exécuteur de la fonction qui définit l'opération asynchrone qui doit être effectué et dont le résultat est représenté par la promesse. Il commence l'exécution dès que la promesse de l'objet est initialisé.
résoudre :: resolve est un des paramètres passés à la fonction d'exécuteur testamentaire , et dans le cas où l'exécuteur s'exécute avec succès, alors cette volonté est appelé le résultat le passage.
rejeter :: rejette, c'est un autre paramètre passé à la fonction d'exécuteur testamentaire , et il est utilisé lorsque l'exécuteur de la fonction échoue. La raison de l'échec peut être transmis à la rejeter.
Donc à chaque fois que nous créons un objet promise, nous avons à fournir de l'Exécuteur testamentaire, à Résoudre et à Rejeter.
Référence :: Promesses
J'ai également été à la recherche dans les promesses de node.js récemment. À ce jour, le when.js semble être la voie à suivre en raison de sa vitesse et de l'utilisation des ressources, mais la documentation sur q.js m'a donné beaucoup mieux la comprendre. Donc de l'utiliser when.js mais la q.js docs pour comprendre le sujet.
De la q.js readme sur github: