Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A solid, fast Promises/A+ and when() implementation, plus other async goodies.

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
docs
node
test
unfold
.editorconfig
.gitignore
.gitmodules
.jshintignore
.jshintrc
.travis.yml
CHANGES.md
LICENSE.txt
README.md
apply.js
callbacks.js
cancelable.js
debug.js
delay.js
function.js
package.json
parallel.js
pipeline.js
poll.js
sequence.js
timed.js
timeout.js
unfold.js
when.js

README.md

when.js Build Status

When.js is cujojs's lightweight CommonJS Promises/A and when() implementation, derived from the async core of wire.js, cujojs's IOC Container. It also provides several other useful Promise-related concepts, such as joining multiple promises, mapping and reducing collections of promises, timed promises, and has a robust unit test suite.

It passes the Promises/A Test Suite, is frighteningly fast, and is around 1.4k when compiled with Google Closure (w/advanced optimizations) and gzipped, and has no external dependencies.

What's New?

1.8.1

1.8.0

1.7.1

  • Removed leftover internal usages of deferred.then.
  • when/debug allows configuring the set of "fatal" error types that will be rethrown to the host env.

1.7.0

  • DEPRECATED: deferred.then is deprecated and will be removed in an upcoming release. Use deferred.promise.then instead.
  • promise.yield(promiseOrValue) convenience API for substituting a new value into a promise chain.
  • promise.spread(variadicFunction) convenience API for spreading an array onto a fulfill handler that accepts variadic arguments. Mmmm, buttery
  • Doc improvements:
    • when() and promise.then() have more info about callbacks and chaining behavior.
    • More info and clarifications about the roles of Deferred and Resolver
    • Several minor clarifications for various APIs
  • Internal improvements to assimilation and interoperability with other promise implementations.

Full Changelog

Docs & Examples

API docs

More info on the wiki

Examples

Quick Start

AMD

  1. git clone https://github.com/cujojs/when or git submodule add https://github.com/cujojs/when
  2. Configure your loader with a package:

    packages: [
        { name: 'when', location: 'path/to/when/', main: 'when' },
        // ... other packages ...
    ]
  3. define(['when', ...], function(when, ...) { ... }); or require(['when', ...], function(when, ...) { ... });

Script Tag

  1. git clone https://github.com/cujojs/when or git submodule add https://github.com/cujojs/when
  2. <script src="path/to/when/when.js"></script>
  3. when will be available as window.when

Node

  1. npm install when
  2. var when = require('when');

RingoJS

  1. ringo-admin install cujojs/when
  2. var when = require('when');

Running the Unit Tests

Node

Note that when.js includes @domenic's Promises/A Test Suite. Running unit tests in Node will run both when.js's own test suite, and the Promises/A Test Suite.

  1. npm install
  2. npm test

Browsers

  1. npm install
  2. npm start - starts buster server & prints a url
  3. Point browsers at /capture, e.g. localhost:1111/capture
  4. npm run-script test-browser

References

Much of this code was inspired by @unscriptable's tiny promises, the async innards of wire.js, and some gists here, here, here, and here

Some of the code has been influenced by the great work in Q, Dojo's Deferred, and uber.js.

Something went wrong with that request. Please try again.