GitHunt
CO

Correia-jpv/fucking-awesome-promises

A curated list of useful resources for JavaScript Promises. With repository stars⭐ and forks🍴

Promises/A+ logo

Awesome Promises Awesome

A curated list of useful resources for JavaScript Promises

Inspired by the 443459⭐  33418🍴 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.

  •    138⭐     17🍴 pinkie) - Ponyfill. Node-oriented, but  14731⭐   1198🍴 browserifyable). Extremely small implementation.
  •    717⭐     68🍴 native-promise-only) - Polyfill. Browser and node-compatible.
  •   7289⭐    589🍴 es6-promise) - Opt-in polyfill. A strict-spec subset of rsvp.js.
  •    742⭐     60🍴 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.

  •  20759⭐   2324🍴 bluebird) - Fully featured, extremely performant. Long stack traces & generator/coroutine support.
  •    278⭐     20🍴 creed) - Hyper performant & full featured like Bluebird, but FP-oriented. Coroutines, generators, promises, ES2015 iterables, & fantasy-land spec.
  •      ?⭐      ?🍴 rsvp.js) - Lightweight with a few extras. Compatible down to IE6!
  •  15227⭐   1187🍴 Q) - One of the original implementations. Long stack traces and other goodies.
  •   2591⭐    311🍴 then/promise) - Small with nodeify, denodify and done() additions.
  •   3431⭐    390🍴 when.js) - Packed with control flow, functional, and utility methods.

Fallbacks

  • 🌎 native-or-bluebird - Helps transition to completely native.
  •    116⭐     17🍴 pinkie-promise) - Use native, or fall back to pinkie. Great for node library authors.
  •    181⭐     16🍴 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!

sindresorhus's many Promise utilities (  5125⭐    137🍴 see notes))

  •    627⭐     38🍴 delay) - Delay a promise a specified amount of time.
  •   1513⭐     71🍴 pify) - Promisify ("denodify") a callback-style function.
  •    282⭐     16🍴 loud-rejection) - Make unhandled promise rejections fail loudly instead of the default silent fail.
  •    107⭐      5🍴 hard-rejection) - Make unhandled promise rejections fail hard right away instead of the default silent fail
  •   4142⭐    198🍴 p-queue) - Promise queue with concurrency control
  •     24⭐      5🍴 p-break) - Break out of a promise chain
  •    285⭐     12🍴 p-lazy) - Create a lazy promise that defers execution until .then() or .catch() is called
  •     84⭐      9🍴 p-defer) - Create a deferred promise
  •     63⭐      7🍴 p-if) - Conditional promise chains
  •    134⭐      8🍴 p-tap) - Tap into a promise chain without affecting its value or state
  •   1483⭐     64🍴 p-map) - Map over promises concurrently
  •    344⭐     15🍴 p-all) - Run promise-returning & async functions concurrently with optional limited concurrency
  •   2813⭐    127🍴 p-limit) - Run multiple promise-returning & async functions with limited concurrency
  •     41⭐      6🍴 p-times) - Run promise-returning & async functions a specific number of times concurrently
  •     40⭐      7🍴 p-catch-if) - Conditional promise catch handler
  •     72⭐      6🍴 p-time) - Measure the time a promise takes to resolve
  •     29⭐      5🍴 p-log) - Log the value/error of a promise
  •     80⭐      9🍴 p-filter) - Filter promises concurrently
  •     94⭐     11🍴 p-settle) - Settle promises concurrently and get their fulfillment value or rejection reason
  •    437⭐     32🍴 p-memoize) - Memoize promise-returning & async functions
  •     58⭐     10🍴 p-whilst) - Calls a function repeatedly while a condition returns true and then resolves the promise
  •    513⭐     33🍴 p-throttle) - Throttle promise-returning & async functions
  •    234⭐     26🍴 p-debounce) - Debounce promise-returning & async functions
  •    991⭐     77🍴 p-retry) - Retry a promise-returning or async function
  •    166⭐     20🍴 p-wait-for) - Wait for a condition to be true
  •    299⭐     36🍴 p-timeout) - Timeout a promise after a specified amount of time
  •     51⭐      6🍴 p-race) - A better Promise.race()
  •     60⭐     12🍴 p-try) - Promise#try() ponyfill - Starts a promise chain
  •     47⭐      8🍴 p-finally) - Promise#finally() ponyfill - Invoked when the promise is settled regardless of outcome
  •     56⭐      7🍴 p-any) - Wait for any promise to be fulfilled
  •     39⭐      9🍴 p-some) - Wait for a specified number of promises to be fulfilled
  •    127⭐     13🍴 p-pipe) - Compose promise-returning & async functions into a reusable pipeline
  •     52⭐      8🍴 p-each-series) - Iterate over promises serially
  •     50⭐      5🍴 p-map-series) - Map over promises serially
  •     74⭐      8🍴 p-reduce) - Reduce a list of values using promises into a promise for a value
  •    200⭐     14🍴 p-props) - Like Promise.all() but for Map and Object

Others

  •      2⭐      0🍴 promise-method) - Standalone bluebird.method. Turn a synchronously-returning method into a promise-returning one.
  •    282⭐     32🍴 is-promise) - Determine if something looks like a Promise.
  •     14⭐      0🍴 sprom) - Resolve when a stream ends. Optional buffering (be careful with this!)
  •   1628⭐     72🍴 task.js) - Write async functions in a blocking style using promises and generators. Like bluebird.coroutine.
  •  11872⭐    785🍴 co) - Like task.js and bluebird.coroutine, but supports thunks too.
  • 🌎 lie-fs - Promise wrappers for Node's FS API.
  •      1⭐      0🍴 promise-do-until) - Calls a function repeatedly until a condition returns true and then resolves the promise.
  •      3⭐      1🍴 promise-do-whilst) - Calls a function repeatedly while a condition returns true and then resolves the promise.
  •     28⭐      7🍴 promise-semaphore) - Push a set of work to be done in a configurable serial fashion
  •      2⭐      0🍴 promise-nodeify) - Standalone nodeify method which calls a Node-style callback on resolution or rejection.

License

Licensed under the 🌎 Creative Commons CC0 License.

Source

  1700⭐    123🍴 wbinnssmith/awesome-promises)