/awesome-promises

A curated list of useful resources for JavaScript Promises

Creative Commons Zero v1.0 UniversalCC0-1.0

Promises/A+ logo

Awesome Promises Awesome

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

For beginners

Deep Dive

References

Promises/A+ Implementations (ES6/ES2015 compatible)

Strict Implementations

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.

Implementations with extras

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 and done() additions.
  • when.js - Packed with control flow, functional, and utility methods.

Fallbacks

  • 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.

Convenience Utilities

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-each - Standalone bluebird.each. Execute one after the other sequentially.
  • promise-filter - Standalone bluebird.filter. Filter an array to a promise.
  • promise-finally - Standalone bluebird finally(). Execute a handler unconditionally after others have been handled.
  • 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's RSVP.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 and bluebird.coroutine, but supports thunks too.
  • lie-fs - Promise wrappers for Node's FS API.
  • immediate-promise - Returns a promise resolved in the next event loop - think setImmediate().
  • delay - Delay a promise a specified amount of time.
  • promise-whilst - Calls a function repeatedly if and while a condition returns true and then resolves the promise.
  • loud-rejection - Make unhandled promise rejections fail loudly instead of the default silent fail.
  • promise-until - Calls a function repeatedly if a condition returns false and until the condition returns true and then resolves the promise.
  • promise-do-until - Calls a function repeatedly until a condition returns true and then resolves the promise.
  • promise-do-whilst - Calls a function repeatedly while a condition returns true and then resolves the promise.
  • promise-semaphore - Push a set of work to be done in a configurable serial fashion

License

Licensed under the Creative Commons CC0 License.