Skip to content
forked from cujojs/when

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

License

Notifications You must be signed in to change notification settings

CloudMetal/when

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Promises/A+ logo

Build Status

when.js

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, settling, 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 and compact, and has no external dependencies.

Installation

AMD

Availble as when through bower and yeoman, or just clone the repo and load when.js from the root. When.js is AMD-compatible out of the box, so no need for shims.

CommonJS/Node

npm install when

More help & other environments »

Usage

Promises can be used to help manage complex and/or nested callback flows in a simple manner. To get a better handle on how promise flows look and how they can be helpful, there are a couple examples below (using commonjs).

This first example will print "hello world!!!!" if all went well, or "drat!" if there was a problem. It also uses rest to make an ajax request to a (fictional) external service.

var rest = require('rest');

fetchRemoteGreeting()
    .then(addExclamation)
    .catch(handleError)
    .done(function(greeting) {
        console.log(greeting);
    });

function fetchRemoteGreeting() {
    // returns a when.js promise for 'hello world'
    return rest('http://example.com/greeting');
}

function addExclamation(greeting) {
    return greeting + '!!!!'
}

function handleError(e) {
    return 'drat!';
}

The second example shows off the power that comes with when's promise logic. Here, we get an array of numbers from a remote source and reduce them. The example will print 150 if all went well, and if there was a problem will print a full stack trace.

var when = require('when');
var rest = require('rest');

when.reduce(when.map(getRemoteNumberList(), times10), sum)
    .done(function(result) {
        console.log(result);
    });

function getRemoteNumberList() {
    // Get a remote array [1, 2, 3, 4, 5]
    return rest('http://example.com/numbers').then(JSON.parse);
}

function sum(x, y) { return x + y; }
function times10(x) {return x * 10; }

License

Licensed under MIT. See the license here »

Contributing

Please see the contributing guide for more information on running tests, opening issues, and contributing code to the project.

References

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.

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published