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')
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
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
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')
promises.register('es6-promise-polyfill')
promises.has('es6-promise-polyfill')
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')
promises.has('es6-promise-polyfill')
promises.unregister('es6-promise-polyfill')
Current list of implementations (order by alphabet)
How to add a new implementation
Criteria
-
MUST register on npm
-
MUST support new Promise(function executor(resolve, reject) { ... })
, Promise.resolve()
and Promise.reject()
API
-
SHOULD 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