Breeze
Functional async flow control library. Turn your asynchronous code into bite-sized synchronous looking functions.
![Dependencies](https://img.shields.io/david/Nijikokun/breeze.svg?style=flat)
Install
Usage
Node.js / Browserify
var breeze = require('breeze')
API
breeze(next)
- Initialize breeze flow system, supports initial .then
method..when(check, next)
- When check
is truthy, add next
to the stack.maybe(check, next)
- When check
is truthy, add next
to the stack, sugar for breeze.when
.some(check, next)
- When check
is truthy and no other some
or none
has ran, add to the stack.none(next)
- Whenever no some
have ran, add callback to the stack.then(next)
- Add callback to stack.catch(next)
- Any error caught will terminate stack and be sent here.promise()
- Returns a deferred promise system, allowing for a second .catch
.reset()
- Reset current system
Next
The next
method passed through breeze has a very small api. It accepts two variants of usage, normal node style
err, arguments...
, and promise, arguments...
.
When a truthy err
is passed the system will halt (no other actions will be taken) and .catch
will be triggered.
When a promise
is passed the system will attach to either the then / catch
methods, or the .then(then, catch)
method style depending on the promise type passed. Whenever the then
is invoked, any arguments
passed along with
the passed promise are placed at the front of the arguments array, and the success arguments will be last.
This allows you to chain multiple promises while still passing values down the chain.
Example
function fetchUserTodos (username) {
var flow = breeze(function (next) {
next(api(token).getUser(username))
})
flow.then(function (next, user) {
next(user.getTodos(), user)
})
flow.when(function (user, todos) {
return todos.getLength() < 0
}, function (next, user, todos) {
todos.reset()
next(todos.save(), user)
})
flow.then(function (next, user, todos) {
next(null, user, todos)
})
flow.catch(function (err) {
if (err.code === 500) {
console.error('Holy Switch A Roo Batman! I think something really went wrong.')
}
console.error(err)
})
return flow.promise()
}
var promise = fetchUserTodos('nijikokun')
promise.then(function (user, todos) {
})
promise.catch(function (err) {
})
Examples
Check out the examples directory for in-depth examples and tutorials of how to use breeze.
License
Licensed under The MIT License.