all-promises
v1.5.1
Published
Collect all Promise Implementations
Downloads
9
Readme
all-promises
This project is try to collect all Promise implementations which follow ECMAScript 6 (which based on Promises/A+ 1.1.1).
Usage
The goal of this project is to provide a centric location to ease the comparison and testings of different implementations. Normally you only need one Promise implementation in your application, so you would mostly never use this package in the productions.
Install
npm install all-promises
API
function getPromiseConstructor(name: string): PromiseConstructor
var Promise = require('all-promises').getPromiseConstructor('q') // q implementation
var p = new Promise(function (resolve) { resolve(1) })
p.then(function (x) { assert(x === 1) })
default: PromiseConstructor
test.js
file:
var Promise = require('all-promises').default // default implementation
You can specify default implementation by passing env variable:
P=rsvp node test
If no env P
is provided, default to V8 native implementation
list: Array<PromiseImplementation>
interface PromiseImplementation {
name: string,
version: string,
aliases: Array<string>,
Promise: PromiseConstructor?,
error: Error?
}
var list = require('all-promises').list
list.forEach(function (impl, index) {
console.log(index + '.',
'package name:', impl.name,
'aliases:', impl.aliases,
'version:', impl.version)
var Promise = impl.Promise // Promise constructor
if (Promise) Promise.resolve(1).then(function (x) { assert(x === 1) })
else console.warn(impl.error)
})
function register(packageName: string, alias?: string|Array<string>, exportPromise?: string|function)
function unregister(name: string): boolean
function has(name: string): boolean
function get(name: string): PromiseImplementation
var promises = require('all-promises')
promises.has('es6-promise-polyfill') // false
promises.register('es6-promise-polyfill')
promises.has('es6-promise-polyfill') // true
var impl = promises.get('es6-promise-polyfill')
assert.deepEqual(impl, {
name: 'es6-promise-polyfill',
aliases: [],
Promise: promises.getPromiseConstructor('es6-promise-polyfill'),
})
promises.unregister('es6-promise-polyfill') // true
promises.has('es6-promise-polyfill') // false
promises.unregister('es6-promise-polyfill') // false
Current list of implementations (order by alphabet)
| package | repo | alias | ------- | ---- | ----- | bluebird | petkaantonov/bluebird | bb | es6-promise | jakearchibald/es6-promise | | es6-promise-polyfill [^1] | lahmatiy/es6-promise-polyfill | | es6-promises | Octane/Promise | | lie | calvinmetcalf/lie | | my-promise | hax/my-promise | my | native-promise-only | getify/native-promise-only | npo | promiscuous | RubenVerborgh/promiscuous | | promise | then/promise | then | promiz | Zolmeister/promiz | | q | kriskowal/q | | rsvp | tildeio/rsvp.js | | vow | dfilatov/vow | | when | cujojs/when | w | yaku | ysmood/yaku |
[^1]: based on es6-promise, so excluded from the registery by default
How to add a new implementation
Criteria
MUST register on npm
MUST support
new Promise(function executor(resolve, reject) { ... })
,Promise.resolve()
andPromise.reject()
APISHOULD pass all Promise/A+ Tests
NOTE: Currently most implementations don't pass ES6 Promise Tests, so it's not on the MUST list up to now.
Contribute
- Edit implementations.js
- Edit package.json (
npm install package-name-of-new-implementation --save
) - Run
npm test
, if everything is ok then - Send pull request