Skip to content

xiekw2010/all-promises

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build status NPM version Dependency status

all-promises

This project is try to collect all Promise implementations which follow ECMAScript 6 draft (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

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

  1. Edit implementations.js
  2. Edit package.json (npm install package-name-of-new-implementation --save-dev)
  3. Run npm test, if everything is ok then
  4. Send pull request

Footnotes

  1. based on es6-promise, so excluded from the registery by default

About

Collect all Promise Implementations

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%