benz [![npmjs.com][npmjs-img]][npmjs-url] [![The MIT License][license-img]][license-url]

September 14, 2015 ยท View on GitHub

benz npmjs.com The MIT License

Compose your control flow with absolute elegance. Support async/await, callbacks, thunks, generators, promises, observables, child processes and streams. Can power applications that need to have plugins. Useful for creating task, test and bench runners. Built with backward compatibility and future stability in mind.

Install

npm i benz --save
npm test

Usage

For more use-cases see the tests

var benz = require('benz')

API

Benz

Create a new instance of Benz.

  • [options] {Object} Initialize with default options.

Example

var Benz = require('benz')
var benz = new Benz()

.compose

Used internally to create .parallel and .series methods.

  • <method> {String} all available now-and-later methods or series, or parallel
  • returns {Function} composed function

Example

var fs = require('fs')
var benz = require('benz')
var series = benz().compose('series')

var done = series([
  function (fp, encoding, next) {
    fs.readFile(fp, encoding, next)
  },
  function (content, next) {
    var name = JSON.parse(content).name
    next(null, name)
  }
])

done('./package.json', 'utf8', function (err, res) {
  console.log(err) //=> null
  console.log(res)
  //=> ['{\n  "name": "benz",\n  "version": "0.4.0" ...', 'benz']
})

.series

Run fns (plugins stack) in series.

  • <fns> {Function|Array|Object} plugins stack
  • [extensions] {Object} passed to now-and-later
  • returns {Function} final done callback

Example

var done = benz.series([
  function one (initial, next) {
    setTimeout(function () {
      console.log('second')
      next(null, initial + 555)
    }, Math.random() * 50)
  },
  function two (initial, next) {
    setTimeout(function () {
      console.log('third')
      next(null, initial + 333)
    }, Math.random() * 200)
  },
  function three (initial, next) {
    setTimeout(function () {
      console.log('first')
      next(null, initial + 111)
    }, 0)
  }
])

done(222, function (err, res) {
  //=> 'second'
  //=> 'third'
  //=> 'first'

  console.log(err, res)
  //=> [777, 555, 111]
})

.parallel

Run fns (plugins stack) in paralell and maintain order of the results.

  • <fns> {Function|Array|Object} plugins stack
  • [extensions] {Object} passed to now-and-later
  • returns {Function} final done callback

Example

var done = benz.parallel([
  function one (initial, next) {
    setTimeout(function () {
      console.log('second')
      next(null, initial + 300)
    }, Math.random() * 50)
  },
  function two (initial, next) {
    setTimeout(function () {
      console.log('third')
      next(null, initial + 100)
    }, Math.random() * 200)
  },
  function three (initial, next) {
    setTimeout(function () {
      console.log('first')
      next(null, initial + 444)
    }, 0)
  }
])

done(100, function (err, res) {
  //=> 'first'
  //=> 'second'
  //=> 'third'

  console.log(err, res)
  //=> [400, 200, 544]
})

.run

Alias of .series and .parallel. By default will run the stack in series, otherwise in parallel, but only if parallel option is enabled.

  • <fns> {Function|Array|Object} plugins stack
  • [extensions] {Object} passed to now-and-later
  • returns {Function} final done callback

Example

var fs = require('fs')
var done = benz.enable('onlylast').run([
  fs.readFile,
  function (content, next) {
    next(null, JSON.parse(content).name)
  }
])

done('./package.json', 'utf8', function (err, res) {
  console.log(err, res) //=> null 'benz'
})

Contributing

Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
But before doing anything, please read the CONTRIBUTING.md guidelines.

Charlike Make Reagent new message to charlike freenode #charlike

tunnckocore.tk keybase tunnckocore tunnckoCore npm tunnckoCore twitter tunnckoCore github