Skip to content

hax/all-promises

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

all-promises

Build status Greenkeeper badge NPM version Dependency status

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

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)
  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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •