zig

Simple, but naughty, control flow for Node.js.

  • zig

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
zig
600.3.06 years ago10 years agoMinified + gzip package size for zig in KB

Readme

Zig - Simple, but naughty, control flow for Node.js
Why have an if statement when you can have an if function?

A special case solution for callback hell that focuses on developer ease-of-use. Executes your functions in series or parallel, tracks errors and results, and provides conditionals.
Allows you to move blocks of code around to change the order of execution.
Current Version: 0.1.1
Tested on: Node 0.10.38
Build Status
Annotated Source
Support
If you're using this module, feel free to contact me on twitter if you have any questions! :) @rjrodger
Gitter chat
Install
npm install zig

Quick Example

Some callbacks:
function color(val,callback) {
  callback(null,{color:val})
}

function quality(val,callback) {
  callback(null,{quality:val})
}

function sound(val,callback) {
  callback(null,{sound:val})
}

function texture(val,callback) {
  callback(null,{texture:val})
}

Nice and linear down the page.
var zig = require('..')

var result = {}

zig()
  .start()

  .wait(function(data,done){
    color('red',done)
  })
  .step(function(data){
    console.log('color:'+data.color)
    return result.color = data.color
  })

  .wait(function(data,done){
    quality('high',done)
  })
  .step(function(data){
    console.log('quality:'+data.quality)
    return result.quality = data.quality
  })

  .if( Math.random() < 0.5 )
  .wait(function(data,done){
    sound('violin',done)
  })
  .step(function(data){
    console.log('sound:'+data.sound)
    return result.sound = data.sound
  })
  .endif()

  .wait(function(data,done){
    texture('rough',done)
  })
  .step(function(data){
    console.log('texture:'+data.texture)
    return result.texture = data.texture
  })

  .end(function(err){
    if( err ) return console.log(err)
    console.log(result)
  })

Versus callback hell:
var result = {}

color('red', function(err,data){
  if( err ) return console.log(err)

  result.color = data.color
  console.log('color:'+data.color)

  quality('high', function(err,data){
    if( err ) return console.log(err)

    result.quality = data.quality
    console.log('quality:'+data.quality)

    if( Math.random() < 0.5 ) {
      sound('violin',function(err,data){
        if( err ) return console.log(err)

        result.sound = data.sound
        console.log('sound:'+data.sound)
        do_texture()
      })
    }
    else do_texture()

    function do_texture() {
      texture('rough', function(err,data){
        if( err ) return console.log(err)

        result.texture = data.texture
        console.log('texture:'+data.texture)

        console.log(result)
      })
    }
  })
})

Testing

npm test

Releases

* 0.1.0: normalize test, build, and readme
* 0.0.2: steps can exit
* 0.0.1: first working version