This project is try to collect all Promise implementations which follow ECMAScript 6 (which based on Promises/A+ 1.1.1).
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.
npm install all-promises
var Promise = require('all-promises').getPromiseConstructor('q') // q implementation
var p = new Promise(function (resolve) { resolve(1) })
p.then(function (x) { assert(x === 1) })
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
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)
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
-
MUST register on npm
-
MUST support
new Promise(function executor(resolve, reject) { ... })
,Promise.resolve()
andPromise.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.
- 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
Footnotes
-
based on es6-promise, so excluded from the registery by default ↩