Ranked awesome lists, all in one place
This list is a copy of wbinnssmith/awesome-promises with ranks
Awesome Promises ★87749
A curated list of useful resources for JavaScript Promises
Inspired by the awesome ★87749 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
Resources, Blogs, and Books
For beginners
- Promise Cookbook ★1314 ⏳1Y - The why, what, and how. “A brief introduction […] primarily aimed at frontend developers”.
- Promises for Asynchronous Programming - Chapter from Exploring ES6
- You Don’t Know JS: Promises - Chapter from You Don’t Know JS: Async & Performance
- JavaScript Promises: an Introduction - Basics of JavaScript’s native promise implementation.
- JavaScript with Promises - from O’Reilly. Short and to-the-point. Uses native and bluebird.
- Promise it won’t hurt ★556 - An interactive nodeschool workshop
- ES6 Kata Promises - Promises Katas : Basics
- ES6 Promises in Depth
- An Incremental Tutorial on Promises - An FAQ styled tutorial for beginners.
Deep Dive
- Promise Fun ★1800 - @sindresorhus’s notes, patterns, and solutions to common Promise problems
- You’re Missing the Point of Promises - Promises are much more than callback aggregation, and that jQuery’s implementation (prior to 3.0) isn’t enough.
- We have a problem with promises - “Many of us are using promises without really understanding them.”
- Promise anti-patterns - Common misuses and how to avoid them.
- Promise anti-patterns (2) - Another set of promises anti-patterns
- Promise Ponderings, (Anti-)Patterns, and Apologies - Promise behaviour demonstrated and explained by common questions and their answers.
- Javascript Promises…In Wicked Detail - Recreate the promise implementation
- Writing Promise-Using Specifications - “This document gives guidance on how to write specifications that create, accept, or manipulate promises”
- Async functions - making promises friendly
References
- Promises/A+ specification
- caniuse promises
- Fates and States - Quick definitions of possible states.
- Promisees - Promise visualization playground for the adventurous.
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 ★624 - Polyfill. Browser and node-compatible.
- es6-promise ★5868 - Opt-in polyfill. A strict-spec subset of rsvp.js.
- lie ★650 - 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 ★16957 - Fully featured, extremely performant. Long stack traces & generator/coroutine support.
- creed ★236 - Hyper performant & full featured like Bluebird, but FP-oriented. Coroutines, generators, promises, ES2015 iterables, & fantasy-land spec.
- rsvp.js ★3483 - Lightweight with a few extras. Compatible down to IE6!
- Q ★14228 - One of the original implementations. Long stack traces and other goodies.
- then/promise ★1880 - Small with
nodeify
,denodify
anddone()
additions. - when.js ★3359 - Packed with control flow, functional, and utility methods.
Fallbacks
- native-or-bluebird - Helps transition to completely native.
- pinkie-promise ★112 - Use native, or fall back to
pinkie
. Great for node library authors. - any-promise ★162 ⏳1Y - 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 (see notes ★1800)
- delay ★232 - Delay a promise a specified amount of time.
- pify ★968 - Promisify (“denodify”) a callback-style function.
- loud-rejection ★213 - Make unhandled promise rejections fail loudly instead of the default silent fail.
- hard-rejection ★59 ⏳1Y - Make unhandled promise rejections fail hard right away instead of the default silent fail
- p-queue ★361 - Promise queue with concurrency control
- p-break ★9 - Break out of a promise chain
- p-lazy ★48 ⏳1Y - Create a lazy promise that defers execution until
.then()
or.catch()
is called - p-defer ★18 ⏳1Y - Create a deferred promise
- p-if ★42 ⏳1Y - Conditional promise chains
- p-tap ★111 - Tap into a promise chain without affecting its value or state
- p-map ★272 - Map over promises concurrently
- p-all ★64 ⏳1Y - Run promise-returning & async functions concurrently with optional limited concurrency
- p-limit ★109 - Run multiple promise-returning & async functions with limited concurrency
- p-times ★16 ⏳1Y - Run promise-returning & async functions a specific number of times concurrently
- p-catch-if ★26 ⏳1Y - Conditional promise catch handler
- p-time ★51 ⏳1Y - Measure the time a promise takes to resolve
- p-log ★18 ⏳1Y - Log the value/error of a promise
- p-filter ★27 - Filter promises concurrently
- p-settle ★38 - Settle promises concurrently and get their fulfillment value or rejection reason
- p-memoize ★62 - Memoize promise-returning & async functions
- p-whilst ★35 - Calls a function repeatedly while a condition returns true and then resolves the promise
- p-throttle ★57 - Throttle promise-returning & async functions
- p-debounce ★49 ⏳1Y - Debounce promise-returning & async functions
- p-retry ★154 - Retry a promise-returning or async function
- p-wait-for ★34 - Wait for a condition to be true
- p-timeout ★78 - Timeout a promise after a specified amount of time
- p-race ★28 ⏳1Y - A better
Promise.race()
- p-try ★14 -
Promise#try()
ponyfill - Starts a promise chain - p-finally ★35 -
Promise#finally()
ponyfill - Invoked when the promise is settled regardless of outcome - p-any ★27 ⏳1Y - Wait for any promise to be fulfilled
- p-some ★20 - Wait for a specified number of promises to be fulfilled
- p-pipe ★51 - Compose promise-returning & async functions into a reusable pipeline
- p-each-series ★23 ⏳1Y - Iterate over promises serially
- p-map-series ★19 ⏳1Y - Map over promises serially
- p-reduce ★32 ⏳1Y - Reduce a list of values using promises into a promise for a value
- p-props ★55 - Like
Promise.all()
but forMap
andObject
Others
- promise-method ★2 ⏳2Y - Standalone
bluebird.method
. Turn a synchronously-returning method into a promise-returning one. - is-promise ★64 - Determine if something looks like a Promise.
- sprom ★13 - Resolve when a stream ends. Optional buffering (be careful with this!)
- task.js ★1628 - Write async functions in a blocking style using promises and generators. Like
bluebird.coroutine
. - co ★9863 - Like
task.js
andbluebird.coroutine
, but supports thunks too. - lie-fs - Promise wrappers for Node’s FS API.
- promise-do-until ★0 ⏳2Y - Calls a function repeatedly until a condition returns true and then resolves the promise.
- promise-do-whilst ★2 ⏳2Y - Calls a function repeatedly while a condition returns true and then resolves the promise.
- promise-semaphore ★29 ⏳1Y - Push a set of work to be done in a configurable serial fashion
- promise-nodeify ★0 - Standalone
nodeify
method which calls a Node-style callback on resolution or rejection.
License
Licensed under the Creative Commons CC0 License. —
This list is a copy of wbinnssmith/awesome-promises with ranks