A curated list of useful resources for JavaScript Promises
Inspired by the awesome list thing. Not to be confused with other awesome promises like "I promise you a million dollars" or "I promise you'll stay fit and never have to go to the gym again".
Table of Contents
- Resources, Blogs, and Books
- Promises/A+ Implementations (ES6/ES2015 compatible)
- Convenience Utilities
- caniuse promises
- Promise Cookbook - The why, what, and how. "A brief introduction [...] primarily aimed at frontend developers".
- You're Missing the Point of Promises - @domenic shows that promises are much more than callback aggregation, and that jQuery's implementation (prior to 3.0) isn't enough.
- JavaScript Promises: There and back again - Basics of JavaScript's native promise implementation.
- Fates and States - Quick definitions of possible states.
- Promise anti-patterns - Common misuses and how to avoid them.
- JavaScript with Promises - from O'Reilly. Short and to-the-point. Uses native and bluebird.
- Promisees - Promise visualization playground for the adventurous.
- Promise it won't hurt - An interactive nodeschool workshop
- We have a problem with promises "Many of us are using promises without really understanding them."
These implement no more or less than the es6 spec. They make great polyfills and are exceptionally compatible with native promises.
- pinkie - Ponyfill. Node-oriented, but browserifyable. Extremely small implementation.
- native-promise-only - Polyfill. Browser and node-compatible.
- es6-promise - Opt-in polyfill. A strict-spec subset of rsvp.js.
- lie - Small, browserifyable with an opt-in polyfill.
All of these provide more features than the language yet remain compatible. Node + Browsers for all.
- bluebird - Fully featured, extremely performant. Long stack traces & generator/coroutine support.
- rsvp.js - Lightweight with a few extras. Compatible down to IE6!
- Q - One of the original implementations. Long stack traces and other goodies.
- then/promise - Small with
nodeify
,denodify
anddone()
additions. - when.js - Packed with control flow, functional, and utility methods.
- native-or-bluebird - Helps transition to completely native.
- pinkie-promise - Use native, or fall back to
pinkie
. Great for node library authors. - any-promise - Loads the first available implementation. Safe for browserify.
Native and strictly spec-compliant promises are awesome for compatibility, future-proofness, library authors, and browsers. However, libraries like bluebird patch goodies onto the Promise
constructor and prototype. Solution? tiny modules of course!
-
pify - Promisify ("denodify") a callback-style function.
-
promise-every - Standalone
bluebird.every
. Execute one after the other sequentially. -
promise-filter - Standalone
bluebird.filter
. Filter an array to a promise. -
promise-map - Standalone
bluebird.map
. Map an array to a promise. -
promise-method - Standalone
bluebird.method
. Turn a synchronously-returning method into a promise-returning one. -
promise-props - Standalone implementation of bluebird's
bluebird.props
or rsvp'sRSVP.hash
-
promise-reduce - Standalone
bluebird.reduce
. Reduce an array to a promise. -
promise-some - Standalone
bluebird.some
. Check if an element passes the predicate, return a promise. -
promise-try - Standalone
bluebird.try
. Execute a synchronously-returning function and return a promise. -
is-promise - Determine if something looks like a Promise.
-
sprom - Resolve when a stream ends. Optional buffering (be careful with this!)
-
task.js - Write async functions in a blocking style using promises and generators. Like
bluebird.coroutine
. -
co - Like
task.js
andbluebird.coroutine
, but supports thunks too. -
lie-fs - Promise wrappers for Node's FS API.