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.
- Fully asynchronous resolutions.
- Promises/A+ compliance.
- New
when/keysmodule withall()andmap()for object keys/values. - New
promise.ensureas a better, and safer, replacement forpromise.always. See discussion as to whypromise.alwaysis 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 whenoryeoman install when, orgit clone https://github.com/cujojs/whenorgit 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 whenvar when = require('when');
ringo-admin install cujojs/whenvar when = require('when');
-
git clone https://github.com/cujojs/whenorgit submodule add https://github.com/cujojs/when -
Add a transient
defineshim, 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>
-
whenwill 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 installnpm test
npm installnpm 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.