Skip to content

nijikokun/breeze

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Breeze

Functional async flow control library built on promises. Managing promises and async code has never been easier.

version License Downloads Dependencies

Features

  • Small footprint
  • Native promise support
  • No chaining required
  • Benchmarking (yes, even Promises)
  • Logging (Chain logs, argument logs, and more...)

Install

Usage

Node.js / Browserify / Webpack

const Breeze = require('breeze')

Documentation

Breeze Flow

import Breeze from 'breeze'

let flow = new Breeze()

Breeze Flow Instance Methods

then(method: Function|Promise)

Add step to flow chain.

flow
  .then(value => 'function with return value')
  .then(value => console.log('function says:', value))
  .then(new Promise((resolve, reject) => {
    return resolve('Promise resolution')
  }))
  .then(value => console.log('promise says:', value))

Note: You are not required to chain instance methods.

flow.then(value => 'function with return value')
flow.then(value => console.log('function says:', value))

catch(type?: ErrorType, handler: Function)

Handle chain rejections. Accepts an optional custom error type to capture specific rejections in the flow chain.

flow.then(() => throw new Error('Spoiler Alert'))

flow.catch(CustomError, err => console.log('Specialized Catch:', err))

flow.catch(err => console.log('Generic Catch:', err))

id(name: String)

Identify a step. Useful for benchmarking and logs.

// Create a flow step
flow.then(results => client.get('/users'))

// Identify step for benchmarking and logs
flow.id('fetch-users')

each(promises: Array, method: Function)

Invoke method on results of each Promise in the given Array.

Todo: Support previous chain Array<Promise> value.

all(promises: Array)

Map promise results to an array in order resolved.

map(promises: Array)

Map promise results to an array in given order.

skip(steps: Number)

Skip n steps after this point.

get(index: Number)

Obtain entry in array at given index in next step.

flow
  .then(() => [1,2,3])
  .get(0)
  .then(item => console.log(item)) // Outputs: 1

when(conditional: Function|Truthy, method: Function)

Invokes method when the conditional argument is truthy, otherwise skips to the next step.

flow
  .then(() => [1, 2, 3])
  .when(result => result[0] === 1, result => console.log(result[0], '=', 1))

This is a basic example to illustrate the small power of how you can make if statements asynchronous.

spread(method: Function)

Spreads each argument from a successful step as individual arguments on the passed method

flow
  .then(() => ['username', 'Steven Seagal'])
  .spread((field, value) => console.log(field, '=', value)) // username = Steven Seagal

tap(method: Function)

Invoke method without modifying the return result of the step, useful for inspection.

flow
  .then(() => [1, 2, 3])
  .tap(result => console.log(result))
  .then(result => console.log(result)) // [1,2,3]

return(value: any)

Convenience method for:

.then(() => value)

throw(reason: any)

Convenience method for:

.then(() => throw error)

License

Licensed under The MIT License.