When.js is cujojs's lightweight Promises/A+ and when()
implementation that powers the async core of wire.js, cujojs's IOC Container. It features:
- A rock solid, battle-tested Promise implementation
- Resolving, mapping, and reducing arrays of promises
- Executing tasks in parallel and sequence
- Transforming Node-style and other callback-based APIs into promise-based APIs
It passes the Promises/A+ Test Suite, is very fast, is under 1.5k when compiled with Google Closure + gzip, and has no external dependencies.
- Account for the fact that Mocha creates a global named
process
. Thanks Narsul
- Fully asynchronous resolutions.
- Promises/A+ compliance.
- New
when/keys
module withall()
andmap()
for object keys/values. - New
promise.ensure
as a better, and safer, replacement forpromise.always
. See discussion as to whypromise.always
is mistake-prone.- DEPRECATED:
promise.always
- DEPRECATED:
lift()
is now the preferred name for what wasbind()
in when/function, when/node/function, and when/callbacks.- DEPRECATED:
bind()
inwhen/function
,when/node/function
, andwhen/callbacks
. Uselift()
instead.
- DEPRECATED:
-
Get it
bower install when
oryeoman install when
, orgit clone https://github.com/cujojs/when
orgit submodule add https://github.com/cujojs/when
-
Configure your loader with a package:
packages: [ { name: 'when', location: 'path/to/when/', main: 'when' }, // ... other packages ... ]
-
define(['when', ...], function(when, ...) { ... });
orrequire(['when', ...], function(when, ...) { ... });
npm install when
var when = require('when');
ringo-admin install cujojs/when
var when = require('when');
-
git clone https://github.com/cujojs/when
orgit submodule add https://github.com/cujojs/when
-
Add a transient
define
shim, and a<script>
element for when.js<script> window.define = function(factory) { try{ delete window.define; } catch(e){ window.define = void 0; } // IE window.when = factory(); }; window.define.amd = {}; </script> <script src="path/to/when/when.js"></script>
-
when
will be available aswindow.when
Note that when.js includes the Promises/A+ Test Suite. Running unit tests in Node will run both when.js's own test suite, and the Promises/A+ Test Suite.
npm install
npm test
npm install
npm start
- starts buster server & prints a url- Point browsers at /capture, e.g.
localhost:1111/capture
npm run-script test-browser
Much of this code was inspired by the async innards of wire.js, and has been influenced by the great work in Q, Dojo's Deferred, and uber.js.