Les promesses dans l’écosystème JS et leur disponibilité native/émulée

Du coup, on a une implémentation native des promesses, spécifiquement le type Promise, dans Node à partir de la version 4, et depuis un gros bail aussi dans Firefox, Chrome, Safari, Edge et Opera. IE (même IE11) ne l'a pas, comme pour pratiquement tout ce qui est arrivé après ES5 en 2009.

Quand on n'a pas de promesses natives, des tas de modules les fournissent, mais on peut aussi vouloir utiliser un de ces modules plutôt que les natives pour des raisons de performance pure ou de fonctionnalités supplémentaires à celles standardisées dans le langage.

Deux modules populaires sont sortis en 2012 : Q, de Kris Kowal, qui a eu le vent en poupe un bon moment mais est aujourd'hui passée de mode, et RSVP, lancée par Yehuda Katz, contributeur phare à Rails et jQuery et co-créateur d'Ember, membre du TC39. RSVP est une toute petite bibliothèque qui fournit une implémentation performante de Promises/A+ avec quelques fonctionnalités bonus sympathiques, et elle reste très utilisée aujourd'hui. Son noyau, sans les fonctions bonus, est disponible à part dans le module es6-promise, et constitue une sorte de polyfill officiel pour cette partie du langage.

La bibliothèque de promesses sans doute la plus connue aujourd'hui est bluebird, créée par Petka Antonov, qui a généralement la meilleure performance observée. On parle de gratter les toutes dernières microsecondes possibles, ce qui n'est pas forcément nécessaire, d'autant qu'avec la syntaxe async/await, qu'on verra en 3e partie de ce cours, on obtient parfois des performances encore plus élevées sans avoir besoin de bluebird.

Ceci dit, en plus de ses performances, obtenues parfois en exigeant une syntaxe différente du standard, bluebird est très appréciée pour la myriade de petites fonctions utilitaires qu'elle propose, tant pour l'écriture du programme que pour son instrumentation et son débogage.

Enfin, quelques jours avant cet enregistrement, la célèbre bibliothèque Async de Caolan McMahon, qui fournit à peu près tous les algorithmes imaginables à base de callbacks, vient de sortir sa version 3, qui rend toutes ses méthodes utilisables également avec des promesses, ce qui est très, très cool !