{"id":54,"url":"https://github.com/wbinnssmith/awesome-promises","last_synced_at":"2025-05-16T02:08:08.394Z","repository":{"id":44159815,"uuid":"42789965","full_name":"wbinnssmith/awesome-promises","owner":"wbinnssmith","description":"A curated list of useful resources for JavaScript Promises","archived":false,"fork":false,"pushed_at":"2023-12-15T08:38:32.000Z","size":48,"stargazers_count":1646,"open_issues_count":6,"forks_count":125,"subscribers_count":39,"default_branch":"master","last_synced_at":"2025-05-14T03:05:36.223Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wbinnssmith.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2015-09-19T21:17:49.000Z","updated_at":"2025-05-07T02:44:41.000Z","dependencies_parsed_at":"2023-12-15T09:45:37.035Z","dependency_job_id":null,"html_url":"https://github.com/wbinnssmith/awesome-promises","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wbinnssmith%2Fawesome-promises","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wbinnssmith%2Fawesome-promises/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wbinnssmith%2Fawesome-promises/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wbinnssmith%2Fawesome-promises/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wbinnssmith","download_url":"https://codeload.github.com/wbinnssmith/awesome-promises/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254159140,"owners_count":22024558,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-01-05T20:12:45.113Z","updated_at":"2025-05-16T02:08:08.371Z","avatar_url":"https://github.com/wbinnssmith.png","language":null,"funding_links":[],"categories":["编程语言","Programming Languages","Technical","Others","Awesome JavaScript Lists","others","Web Development","Uncategorized","More","front-end-development","References","Live Site:   [searchAwesome](https://search-awesome.vercel.app/)","Other Domains in CS","Packages","Other Lists","Source","Themed Directories"],"sub_categories":["awesome-*","Uncategorized","CSS","Control flow","TeX Lists","Others","Updated more than a year ago"],"readme":"\u003ca href=\"https://promisesaplus.com/\"\u003e\n    \u003cimg src=\"https://promisesaplus.com/assets/logo-small.png\" alt=\"Promises/A+ logo\" align=\"right\" /\u003e\n\u003c/a\u003e\n\n# Awesome Promises [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)\n\n\u003e A curated list of useful resources for JavaScript Promises\n\nInspired by the [awesome](https://github.com/sindresorhus/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\".\n\n**Table of Contents**\n\n- [Resources, Blogs, and Books](#resources-blogs-and-books)\n- [Promises/A+ Implementations (ES6/ES2015 compatible)](#promisesa-implementations-es6es2015-compatible)\n  - [Strict Implementations](#strict-implementations)\n  - [Implementations with extras](#implementations-with-extras)\n  - [Fallbacks](#fallbacks)\n- [Convenience Utilities](#convenience-utilities)\n\n## Resources, Blogs, and Books\n\n### For beginners\n* [Promise Cookbook](https://github.com/mattdesl/promise-cookbook) - The why, what, and how. \"A brief introduction [...] primarily aimed at frontend developers\".\n* [Promises for Asynchronous Programming](http://exploringjs.com/es6/ch_promises.html) - Chapter from [Exploring ES6](http://exploringjs.com/)\n* [You Don't Know JS: Promises](https://github.com/getify/You-Dont-Know-JS/blob/master/async%20\u0026%20performance/ch3.md) - Chapter from [You Don't Know JS: Async \u0026 Performance](https://github.com/getify/You-Dont-Know-JS/tree/master/async%20%26%20performance)\n* [JavaScript Promises: an Introduction](https://developers.google.com/web/fundamentals/getting-started/primers/promises) - Basics of JavaScript's native promise implementation.\n* [JavaScript with Promises](http://shop.oreilly.com/product/0636920032151.do) - from O'Reilly. Short and to-the-point. Uses native and bluebird.\n* [Promise it won't hurt](https://github.com/stevekane/promise-it-wont-hurt) - An interactive [nodeschool](https://nodeschool.io/) workshop\n* [ES6 Kata Promises](http://es6katas.org/) - Promises Katas : [Basics](http://tddbin.com/#?kata=es6/language/promise/basics)\n* [ES6 Promises in Depth](https://ponyfoo.com/articles/es6-promises-in-depth)\n* [An Incremental Tutorial on Promises](http://www.sohamkamani.com/blog/2016/08/28/incremenal-tutorial-to-promises/) - An FAQ styled tutorial for beginners.\n\n### Deep Dive\n* [Promise Fun](https://github.com/sindresorhus/promise-fun) - @sindresorhus's notes, patterns, and solutions to common Promise problems\n* [You're Missing the Point of Promises](https://blog.domenic.me/youre-missing-the-point-of-promises/) - Promises are much more than callback aggregation, and that jQuery's implementation (prior to 3.0) isn't enough.\n* [We have a problem with promises](https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html) - \"Many of us are using promises without really understanding them.\"\n* [Promise anti-patterns](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns) - Common misuses and how to avoid them.\n* [Promise anti-patterns (2)](http://taoofcode.net/promise-anti-patterns/) - Another set of promises anti-patterns\n* [Promise Ponderings, (Anti-)Patterns, and Apologies](https://sdgluck.github.io/2015/08/24/promise-ponderings-patterns-apologies/) - Promise behaviour demonstrated and explained by common questions and their answers.\n* [Javascript Promises...In Wicked Detail](http://www.mattgreer.org/articles/promises-in-wicked-detail/) - Recreate the promise implementation\n* [Writing Promise-Using Specifications](https://www.w3.org/2001/tag/doc/promises-guide) - \"This document gives guidance on how to write specifications that create, accept, or manipulate promises\"\n* [Async functions - making promises friendly](https://developers.google.com/web/fundamentals/getting-started/primers/async-functions)\n\n### References\n* [Promises/A+ specification](https://promisesaplus.com/)\n* [caniuse promises](http://caniuse.com/#feat=promises)\n* [Fates and States](https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md) - Quick definitions of possible states.\n* [Promisees](https://bevacqua.github.io/promisees/) - Promise visualization playground for the adventurous.\n\n## Promises/A+ Implementations (ES6/ES2015 compatible)\n\n### Strict Implementations\nThese implement no more or less than the es6 spec. They make great polyfills and are exceptionally compatible with native promises.\n\n* [pinkie](https://github.com/floatdrop/pinkie) - Ponyfill. Node-oriented, but [browserifyable](https://github.com/substack/node-browserify). *Extremely* small implementation.\n* [native-promise-only](https://github.com/getify/native-promise-only) - Polyfill. Browser and node-compatible.\n* [es6-promise](https://github.com/stefanpenner/es6-promise) - Opt-in polyfill. A strict-spec subset of rsvp.js.\n* [lie](https://github.com/calvinmetcalf/lie) - Small, browserifyable with an opt-in polyfill.\n\n### Implementations with extras\nAll of these provide more features than the language yet remain compatible. Node + Browsers for all.\n\n* [bluebird](https://github.com/petkaantonov/bluebird) - Fully featured, extremely performant. Long stack traces \u0026 generator/coroutine support.\n* [creed](https://github.com/briancavalier/creed) - Hyper performant \u0026 full featured like Bluebird, but FP-oriented. Coroutines, generators, promises, ES2015 iterables, \u0026 fantasy-land spec.\n* [rsvp.js](https://github.com/tildeio/rsvp.js/) - Lightweight with a few extras. Compatible down to IE6!\n* [Q](https://github.com/kriskowal/q) - One of the original implementations. Long stack traces and other goodies.\n* [then/promise](https://github.com/then/promise) - Small with `nodeify`, `denodify` and `done()` additions.\n* [when.js](https://github.com/cujojs/when) - Packed with control flow, functional, and utility methods.\n\n\n### Fallbacks\n* [native-or-bluebird](https://www.npmjs.com/package/native-or-bluebird) - Helps transition to completely native.\n* [pinkie-promise](https://github.com/floatdrop/pinkie-promise) - Use native, or fall back to `pinkie`. Great for node library authors.\n* [any-promise](https://github.com/kevinbeaty/any-promise) - Loads the first available implementation. Safe for browserify.\n\n## Convenience Utilities\nNative 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!\n\n### sindresorhus's many Promise utilities ([see notes](https://github.com/sindresorhus/promise-fun))\n* [delay](https://github.com/sindresorhus/delay) - Delay a promise a specified amount of time.\n* [pify](https://github.com/sindresorhus/pify) - Promisify (\"denodify\") a callback-style function.\n* [loud-rejection](https://github.com/sindresorhus/loud-rejection) - Make unhandled promise rejections fail loudly instead of the default silent fail.\n* [hard-rejection](https://github.com/sindresorhus/hard-rejection) - Make unhandled promise rejections fail hard right away instead of the default silent fail\n* [p-queue](https://github.com/sindresorhus/p-queue) - Promise queue with concurrency control\n* [p-break](https://github.com/sindresorhus/p-break) - Break out of a promise chain\n* [p-lazy](https://github.com/sindresorhus/p-lazy) - Create a lazy promise that defers execution until `.then()` or `.catch()` is called\n* [p-defer](https://github.com/sindresorhus/p-defer) - Create a deferred promise\n* [p-if](https://github.com/sindresorhus/p-if) - Conditional promise chains\n* [p-tap](https://github.com/sindresorhus/p-tap) - Tap into a promise chain without affecting its value or state\n* [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently\n* [p-all](https://github.com/sindresorhus/p-all) - Run promise-returning \u0026 async functions concurrently with optional limited concurrency\n* [p-limit](https://github.com/sindresorhus/p-limit) - Run multiple promise-returning \u0026 async functions with limited concurrency\n* [p-times](https://github.com/sindresorhus/p-times) - Run promise-returning \u0026 async functions a specific number of times concurrently\n* [p-catch-if](https://github.com/sindresorhus/p-catch-if) - Conditional promise catch handler\n* [p-time](https://github.com/sindresorhus/p-time) - Measure the time a promise takes to resolve\n* [p-log](https://github.com/sindresorhus/p-log) - Log the value/error of a promise\n* [p-filter](https://github.com/sindresorhus/p-filter) - Filter promises concurrently\n* [p-settle](https://github.com/sindresorhus/p-settle) - Settle promises concurrently and get their fulfillment value or rejection reason\n* [p-memoize](https://github.com/sindresorhus/p-memoize) - Memoize promise-returning \u0026 async functions\n* [p-whilst](https://github.com/sindresorhus/p-whilst) - Calls a function repeatedly while a condition returns true and then resolves the promise\n* [p-throttle](https://github.com/sindresorhus/p-throttle) - Throttle promise-returning \u0026 async functions\n* [p-debounce](https://github.com/sindresorhus/p-debounce) - Debounce promise-returning \u0026 async functions\n* [p-retry](https://github.com/sindresorhus/p-retry) - Retry a promise-returning or async function\n* [p-wait-for](https://github.com/sindresorhus/p-wait-for) - Wait for a condition to be true\n* [p-timeout](https://github.com/sindresorhus/p-timeout) - Timeout a promise after a specified amount of time\n* [p-race](https://github.com/sindresorhus/p-race) - A better `Promise.race()`\n* [p-try](https://github.com/sindresorhus/p-try) - `Promise#try()` ponyfill - Starts a promise chain\n* [p-finally](https://github.com/sindresorhus/p-finally) - `Promise#finally()` ponyfill - Invoked when the promise is settled regardless of outcome\n* [p-any](https://github.com/sindresorhus/p-any) - Wait for any promise to be fulfilled\n* [p-some](https://github.com/sindresorhus/p-some) - Wait for a specified number of promises to be fulfilled\n* [p-pipe](https://github.com/sindresorhus/p-pipe) - Compose promise-returning \u0026 async functions into a reusable pipeline\n* [p-each-series](https://github.com/sindresorhus/p-each-series) - Iterate over promises serially\n* [p-map-series](https://github.com/sindresorhus/p-map-series) - Map over promises serially\n* [p-reduce](https://github.com/sindresorhus/p-reduce) - Reduce a list of values using promises into a promise for a value\n* [p-props](https://github.com/sindresorhus/p-props) - Like `Promise.all()` but for `Map` and `Object`\n\n### Others\n* [promise-method](https://github.com/wbinnssmith/promise-method) - Standalone `bluebird.method`. Turn a synchronously-returning method into a promise-returning one.\n* [is-promise](https://github.com/then/is-promise) - Determine if something looks like a Promise.\n* [sprom](https://github.com/then/sprom) - Resolve when a stream ends. Optional buffering (be careful with this!)\n* [task.js](https://github.com/mozilla/task.js) - Write async functions in a blocking style using promises and generators. Like `bluebird.coroutine`.\n* [co](https://github.com/tj/co) - Like `task.js` and `bluebird.coroutine`, but supports thunks too.\n* [lie-fs](https://www.npmjs.com/package/lie-fs) - Promise wrappers for Node's FS API.\n* [promise-do-until](https://github.com/busterc/promise-do-until) - Calls a function repeatedly until a condition returns true and then resolves the promise.\n* [promise-do-whilst](https://github.com/busterc/promise-do-whilst) - Calls a function repeatedly while a condition returns true and then resolves the promise.\n* [promise-semaphore](https://github.com/samccone/promise-semaphore) - Push a set of work to be done in a configurable serial fashion\n* [promise-nodeify](https://github.com/kevinoid/promise-nodeify) - Standalone `nodeify` method which calls a Node-style callback on resolution or rejection.\n\n## License\nLicensed under the [Creative Commons CC0 License](https://creativecommons.org/publicdomain/zero/1.0/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwbinnssmith%2Fawesome-promises","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwbinnssmith%2Fawesome-promises","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwbinnssmith%2Fawesome-promises/lists"}