Description
When.js is a rock solid, battle-tested Promises/A+ and when() implementation, including a complete ES6 Promise shim. It's a powerful combination of small size, high performance, debuggability, and rich features:
when alternatives and similar libraries
Based on the "Control Flow" category.
Alternatively, view when alternatives based on common mentions on social networks and blogs.
-
modern-async
A modern JavaScript tooling library for asynchronous operations using async/await, promises and async generators -
sporadic
Composable Concurrency Abstractions for JavaScript. :railway_track: :rhinoceros: :train: :vertical_traffic_light: -
ObjectEventTarget
A same behaviour EventTarget prototype, that can work with any object from JavaScript
InfluxDB - Purpose built for real-time analytics at any scale.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of when or a related project?
Popular Comparisons
README
when.js
When.js is a rock solid, battle-tested Promises/A+ and when()
implementation, including a complete [ES6 Promise shim](docs/es6-promise-shim.md). It's a powerful combination of small size, high performance, debuggability, and rich features:
- Resolve arrays and hashes of promises, as well as infinite promise sequences
- Execute tasks in parallel or sequentially
- Transform Node-style and other callback-based APIs into promise-based APIs
When.js is one of the many stand-alone components of cujoJS, the JavaScript Architectural Toolkit.
Check it out:
- [What's new](CHANGES.md)
- [API docs](docs/api.md#api)
- Read more about how promises simplify async programming
Installation
AMD
Available as when
through bower, or just clone the repo and load when.js
from the root.
bower install --save when
CommonJS/Node
npm install --save when
[More help & other environments »](docs/installation.md)
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() {
// convert native Promise to a when.js promise for 'hello world'
var result = rest('http://example.com/greeting');
return when(result)
}
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. [Full license here »](LICENSE.txt)
Contributing
Please see the [contributing guide](CONTRIBUTING.md) 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.
*Note that all licence references and agreements mentioned in the when README section above
are relevant to that project's source code only.