La prise en charge Native pour les Promesses de Node.js
Est-il un support natif pour des promesses dans les versions actuelles de Node.js?
Node.js utilise le moteur V8. Ce moteur JavaScript est également utilisé par google Chrome et de Chrome 32 a un support natif pour des promesses. Mais je n'arrive pas à obtenir des promesses de travail (natif) dans Node.js.
J'ai essayé le code suivant dans Chrome 32 et il fonctionne.
var promise = new Promise(function(resolve, reject) {
//do a thing, possibly async, then…
if ( 1===1 /* everything turned out fine */) {
resolve("Stuff worked!");
}
else {
reject(Error("It broke"));
}
});
promise.then(function( message ) {
console.log( message );
},
function( err ) {
console.log( err );
});
Cependant, quand j'ai essayer de ce même code dans Node.js, j'obtiens:
var promise = new Promise(function(resolve, reject) {
^
ReferenceError: Promise is not defined
Ce code est à partir de l'excellent tutoriel:
http://www.html5rocks.com/en/tutorials/es6/promises/
- La prise en charge Native du Nœud n'est pas super utile jusqu'à ce que tous les modules de commencer à l'utiliser. La promesse de toutes les choses.
- Non! Ne promettez pas choses qui terminent souvent en une fraction de seconde.
- La première chose que j'ai lu après avoir cliqué sur votre lien:
BEWARE This article is old, it's 2013 old. Since then things have changed and a winner has prevailed, Bluebird is a Promises Library build with performance in mind and when actually tested with the benchmarks of this article it did even better than Async!
- Nice, merci!!!
- Plaire à tout le monde d'être conscient que Bluebird, qui prétend être le plus rapide est maintenant ans, sa vitesse demandes ont été essentiellement juste un court-circuit au bord de cas, et à chaque fois que j'ai personnellement testé, il n'a manifestement pas été le plus rapide. Personnellement, j'utilise when.js parce qu'il a un tas de fonctionnalités qui ont rendu ma vie plus facile, mais, comme il arrive, à chaque fois que j'ai fait une comparaison de performances, il a toujours été un tout petit peu plus rapide que Bluebird et de kew. La seule bibliothèque que vous pourriez appeler "lent" est Q, et il n'a pas été mis à jour en 4 ans maintenant. Si vous choisissez quelque chose de vitesse, de tester d'abord vous-même!
Vous devez vous connecter pour publier un commentaire.
Si le nœud est d'utiliser le même ou version ultérieure à la version V8 de google Chrome 32 utilise alors il est probable pris en charge nativement. Sinon, vous aurez besoin de charger 'es6-shim' (je vous conseille de chargement es5-shim premier) je n'ai aucune idée de la version V8 de la version actuelle de nœud à l'aide.
Sur mon installation de nœud
Quelle version de Chrome V32 à l'aide? (J'utilise Chrome v27), ce qui aurait pour trouver de la documentation, mais peut-être 3.22.24.16
À la recherche dans
chrome://version/
semble donner les informationsEt maintenant, à partir d'une installation de Chrome
Bien que Node.js ajouté le natif de la promesse dans la version stable
0.12
.Mais en raison du problème de fuite de mémoire, je recommande d'utiliser
bluebird
pour éviter le problème.Ancien réponse:
Node.js ajouté le natif de promesse de soutien depuis la version
0.11.13
.Note: Node.js
v0.11
est encore en version bêta, être prudent si l'utiliser en production.Je sais qu'il a été un temps assez long depuis l'OP fait ce post, mais je voulais mettre à jour ceux qui réussissent toujours à trouver cette question grâce à la recherche.
Node.js ajouté le support natif pour des Promesses depuis, il a fusionné avec io.js. Ce qui s'est passé le 8 septembre 2015 (comme par cette news post sur le site officiel Node.js site) avec la première version stable de Nœud v4.0.0.
Une foule de nouvelles ES6 fonctionnalités, telles que des Promesses, ont été ajouté avec la version 4. Vous pouvez lire plus sur eux ici.
EDIT: à noter, il semble que Bluebird la Promesse de meilleures performances que le natif de mise en œuvre de la Promesse.
Il est important de souligner que l'on a accepté la réponse à cette question est à l'aide d'une promesse de la bibliothèque qui n'est pas syntaxiquement identique à la JS natif promesse telle que définie par la Promesses/A+ spec.
Si vous voulez Nœud, aussi étroitement que possible, imiter le navigateur, alors vous devriez utiliser la
es6-promise
module situé à https://github.com/jakearchibald/es6-promise.npm install es6-promise
var Promise = require("es6-promise").Promise
Différences Techniques:
Une différence clé dans le module est en très constructeur:
var foo = new Promise()
n'est pas valide dans votre navigateur, comme lePromise
constructeur requiert une fonction pour initialiser, et que la fonction sera responsable de la résolution ou du rejet de cette promesse. Dans lenode-promises
module, résoudre est accessible à tous les utilisateurs de la Promesse, qui rompt le encasuplation de la Promesse.Exemple à l'aide de
node-promises
Exemple à l'aide de
es6-promises
Si vous désirez la capacité à exposer publiquement les résoudre ou de rejeter des capacités que vous aurez besoin de déplier la promesse, exemple ici.
J'ai essayé Nœud v0.11.12 avec l' --harmonie drapeau, et il n'a pas natif de promesses.
v0.11.13 et, plus tard, avec l' --harmonie drapeau ne sont prometteuses.
vous aurez besoin d'avoir de nouveau V8 de la version essayez de compiler de branche master - là, vous trouverez un V8 de la version 3.25.30 avec des Promesses
rapide comparaison avec la norme Q:
Il ressemble à v0.12 prend en charge les promesses, voir nœud.Promesse.
Malgré les promesses ne sont pas nativement dans node.js (encore). Le IO.js fourche de node.js a eux de manière native. Voir:
http://davidwalsh.name/es6-io