apaas.dev
 1 June 2022
              
    SEO Title
              
          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
 
Resources, Blogs, and Books
For beginners
- Promise Cookbook - 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 - 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 - @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 - 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.
 - 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!
 - Q - One of the original implementations. Long stack traces and other goodies.
 - then/promise - Small with 
nodeify,denodifyanddone()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!
sindresorhus's many Promise utilities (see notes)
- delay - Delay a promise a specified amount of time.
 - pify - Promisify ("denodify") a callback-style function.
 - loud-rejection - Make unhandled promise rejections fail loudly instead of the default silent fail.
 - hard-rejection - Make unhandled promise rejections fail hard right away instead of the default silent fail
 - p-queue - Promise queue with concurrency control
 - p-break - Break out of a promise chain
 - p-lazy - Create a lazy promise that defers execution until 
.then()or.catch()is called - p-defer - Create a deferred promise
 - p-if - Conditional promise chains
 - p-tap - Tap into a promise chain without affecting its value or state
 - p-map - Map over promises concurrently
 - p-all - Run promise-returning & async functions concurrently with optional limited concurrency
 - p-limit - Run multiple promise-returning & async functions with limited concurrency
 - p-times - Run promise-returning & async functions a specific number of times concurrently
 - p-catch-if - Conditional promise catch handler
 - p-time - Measure the time a promise takes to resolve
 - p-log - Log the value/error of a promise
 - p-filter - Filter promises concurrently
 - p-settle - Settle promises concurrently and get their fulfillment value or rejection reason
 - p-memoize - Memoize promise-returning & async functions
 - p-whilst - Calls a function repeatedly while a condition returns true and then resolves the promise
 - p-throttle - Throttle promise-returning & async functions
 - p-debounce - Debounce promise-returning & async functions
 - p-retry - Retry a promise-returning or async function
 - p-wait-for - Wait for a condition to be true
 - p-timeout - Timeout a promise after a specified amount of time
 - p-race - A better 
Promise.race() - p-try - 
Promise#try()ponyfill - Starts a promise chain - p-finally - 
Promise#finally()ponyfill - Invoked when the promise is settled regardless of outcome - p-any - Wait for any promise to be fulfilled
 - p-some - Wait for a specified number of promises to be fulfilled
 - p-pipe - Compose promise-returning & async functions into a reusable pipeline
 - p-each-series - Iterate over promises serially
 - p-map-series - Map over promises serially
 - p-reduce - Reduce a list of values using promises into a promise for a value
 - p-props - Like 
Promise.all()but forMapandObject 
Others
- promise-method - Standalone 
bluebird.method. Turn a synchronously-returning method into a promise-returning one. - 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.jsandbluebird.coroutine, but supports thunks too. - lie-fs - Promise wrappers for Node's FS API.
 - 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
 - promise-nodeify - Standalone 
nodeifymethod which calls a Node-style callback on resolution or rejection. 
原文:https://github.com/wbinnssmith/awesome-promises
- 登录 发表评论