{"_id":"chain-tiny","_rev":"27-78ccc103d6713c28aa375d3c11a3de35","name":"chain-tiny","description":"A simple control flow library.","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"chain-tiny","description":"A simple control flow library.","version":"0.1.0","author":{"name":"Kazuhito Hokamura","email":"k.hokamura@gmail.com"},"repository":{"type":"git","url":"git://github.com/hokaccha/node-chain-tiny.git"},"devDependencies":{"nodeunit":"0.5.x"},"engines":{"node":">= 0.4.0"},"keywords":["flow","async","chain"],"main":"./index","_npmJsonOpts":{"file":"/Users/hokamura/.npm/chain-tiny/0.1.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"chain-tiny@0.1.0","dependencies":{},"_engineSupported":true,"_npmVersion":"1.0.27","_nodeVersion":"v0.4.7","_defaultsLoaded":true,"dist":{"shasum":"829d3de63bf28f17e33e8290822397e6baacb7e5","tarball":"https://registry.npmjs.org/chain-tiny/-/chain-tiny-0.1.0.tgz","integrity":"sha512-smhvbeJEw4VllocBinNPuAZusWbU8K86xVg2FDq1J5XY9P0Gs9jgg5edPJRpQcHCcKd6zZLYXwPbteIjOUcjkQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCV8hAI/TTh+qzSVuRQjSKihU+88IZT/7J8KGu1g6e5LAIgZ/rahhGWppmr6p3WaoZz0OJF5lNwkvUEbu2BSYIPCng="}]},"maintainers":[{"name":"hokaccha","email":"k.hokamura@gmail.com"}],"directories":{}},"0.1.1":{"name":"chain-tiny","description":"A simple control flow library.","version":"0.1.1","author":{"name":"Kazuhito Hokamura","email":"k.hokamura@gmail.com"},"repository":{"type":"git","url":"git://github.com/hokaccha/node-chain-tiny.git"},"devDependencies":{"nodeunit":"0.5.x"},"engines":{"node":">= 0.4.0"},"keywords":["flow","async","chain"],"main":"./index","_npmJsonOpts":{"file":"/Users/hokamura/.npm/chain-tiny/0.1.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"chain-tiny@0.1.1","dependencies":{},"_engineSupported":true,"_npmVersion":"1.0.27","_nodeVersion":"v0.4.7","_defaultsLoaded":true,"dist":{"shasum":"5c3c0a36e0d086c7cfafc5acdb475ae6a3881c54","tarball":"https://registry.npmjs.org/chain-tiny/-/chain-tiny-0.1.1.tgz","integrity":"sha512-FPQgFg2QdhOdkIR0NcGWTVidYEl0+Pg+MdltuixAGuFzHbEuoPoZEMWuk+0skB0h5HtExJC6eVqg1gr7moKa6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuFGLpH5Sd+Y/sVyQQSIOxONpWvORSCfUJ0Nssnt7hYAIhANnpwKPH0coNEtEl3/ftiwQP5gaf7IQYp40g4rD5rdXX"}]},"maintainers":[{"name":"hokaccha","email":"k.hokamura@gmail.com"}],"directories":{}},"0.1.2":{"name":"chain-tiny","description":"A simple control flow library.","version":"0.1.2","author":{"name":"Kazuhito Hokamura","email":"k.hokamura@gmail.com"},"repository":{"type":"git","url":"git://github.com/hokaccha/node-chain-tiny.git"},"devDependencies":{"nodeunit":"0.5.x"},"engines":{"node":">= 0.4.0"},"keywords":["flow","async","chain"],"main":"./index","_npmJsonOpts":{"file":"/Users/hokamura/.npm/chain-tiny/0.1.2/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"chain-tiny@0.1.2","dependencies":{},"_engineSupported":true,"_npmVersion":"1.0.27","_nodeVersion":"v0.4.7","_defaultsLoaded":true,"dist":{"shasum":"808ddbf1e323a7966dd4f3612739a9b2f99335bc","tarball":"https://registry.npmjs.org/chain-tiny/-/chain-tiny-0.1.2.tgz","integrity":"sha512-Me9g6cWJ5andi6y/VF+qWxevdLBVRPNOgpY110XiewDOq877i/XiufEDU/IL0eL1dGmt76Rkoix6kIJBE7ujkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDx/0oKSYZZQDmit1uBpSRo4sb/G01VNI1mwrRtIbsU2gIhAJsOIgLIOhEiicExvQj4lFaUQZ9ba0pZu1k8wkhpnIz6"}]},"maintainers":[{"name":"hokaccha","email":"k.hokamura@gmail.com"}],"directories":{}},"0.1.3":{"name":"chain-tiny","description":"A simple control flow library.","version":"0.1.3","author":{"name":"Kazuhito Hokamura","email":"k.hokamura@gmail.com"},"repository":{"type":"git","url":"git://github.com/hokaccha/node-chain-tiny.git"},"devDependencies":{"nodeunit":"0.5.x"},"scripts":{"test":"nodeunit test"},"engines":{"node":">= 0.4.0"},"keywords":["flow","async","chain"],"main":"./index","_npmUser":{"name":"hokaccha","email":"k.hokamura@gmail.com"},"_id":"chain-tiny@0.1.3","dependencies":{},"_engineSupported":true,"_npmVersion":"1.0.99","_nodeVersion":"v0.4.7","_defaultsLoaded":true,"dist":{"shasum":"9acdb6c86498d2637e8e164336f590045dd71cd5","tarball":"https://registry.npmjs.org/chain-tiny/-/chain-tiny-0.1.3.tgz","integrity":"sha512-71DpNOdNGOyB+WXsMp5oBUtHlzNRQcZp+dkbYBt9BlEiR/Hdzrh+11xSRDgfkGRGy7hxARIBztY8FCoCSstn7Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHVxK7xrfEtc3A7PawobvnR92p75Ngsy/q+BX6HrEllOAiBcBf6mMejEDmVNS0SF9O4nFSGpoziQJcVrZBWqD6Zf/A=="}]},"maintainers":[{"name":"hokaccha","email":"k.hokamura@gmail.com"}]},"0.2.0":{"name":"chain-tiny","description":"A simple control flow library.","version":"0.2.0","author":{"name":"Kazuhito Hokamura","email":"k.hokamura@gmail.com"},"repository":{"type":"git","url":"git://github.com/hokaccha/node-chain-tiny.git"},"devDependencies":{"nodeunit":">= 0.6.2"},"scripts":{"test":"nodeunit test"},"engines":{"node":">= 0.4.0"},"keywords":["flow","async","chain"],"main":"./index","_npmUser":{"name":"hokaccha","email":"k.hokamura@gmail.com"},"_id":"chain-tiny@0.2.0","dependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-beta-10","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"4c10eef221875188f49c4ebab17f17add1854a95","tarball":"https://registry.npmjs.org/chain-tiny/-/chain-tiny-0.2.0.tgz","integrity":"sha512-Lf8Wo/zisINdMcuS1I0p3nbCXEfoSdtjdrbwxt1n9VYz3lNUaHbfVFzZJGA7niUQOVOJsfIEBkY0TGgVz3DAlQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0bjEUgM1uuXMOT58H+hlOQEXWlJyXTs/zMMDUZuHa1wIhAKZTnG96lnfO9NaZJOedTj6rKhTAiXrD75BMACECHoqG"}]},"readme":"# node-chain-tiny\n\nA simple control flow library.\n\nThe problem which this library solves is the nest and error handling of callback.\n\nFor exsample.\n\n    asyncFunc1(function(err, result1) {\n      if (err) return callback(err);\n      // do something\n      asyncFunc2(function(err, result2) {\n        if (err) return callback(err);\n        // do something\n        asyncFunc3(function(err, result3) {\n          if (err) return callback(err);\n          // do something\n          callback(null, result);\n        });\n      });\n    });\n\nThis code becomes like this by using chain-tiny. \n\n    chain(function(next) {\n      asyncFunc1(next);\n    })\n    .chain(function(result1, next) {\n      // do something\n      asyncFunc2(next);\n    })\n    .chain(function(result2, next) {\n      // do something\n      asyncFunc3(next);\n    })\n    .end(function(err, result3) {\n      // do something\n      callback(err, result);\n    });\n\n## Install\n\n    $ npm install chain-tiny\n\n## Usage\n\n### simple\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      setTimeout(function() {\n        next(null, 'foo');\n      }, 100);\n    })\n    .chain(function(foo, next) {\n      console.log(foo); // => foo\n      setTimeout(function() {\n        next(null, 'bar', 'baz');\n      }, 1);\n    })\n    .end(function(err, bar, baz) {\n      console.log(bar); // => bar\n      console.log(baz); // => baz\n    });\n\n### error handling\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      next('Error!');\n    })\n    .chain(function(next) {\n      // not pass here\n      next(null, 'foo');\n    })\n    .end(function(err, foo) {\n      console.log(foo); // => undefined\n      console.log(err); // => Error!\n    });\n\n### parallel\n\n    var chain = require('chain-tiny');\n    var results = [];\n\n    chain.parallel({\n      foo: function(next) {\n        setTimeout(function() {\n          results.push(1);\n          next(null, 1);\n        }, 100);\n      },\n      bar: function(next) {\n        setTimeout(function() {\n          results.push(2);\n          next(null, 2);\n        }, 1)\n      }\n    })\n    .end(function(err, res) {\n      console.log(res); // => { foo: 1, bar: 2 }\n      console.log(results); // => [2, 1]\n    });\n\n#### chain\n\n    var chain = require('chain-tiny');\n    var results = [];\n\n    chain(function(next) {\n      // do something\n      next();\n    })\n    .parallel({\n      foo: function(next) {\n        setTimeout(function() {\n          results.push(1);\n          next(null, 1);\n        }, 100);\n      },\n      bar: function(next) {\n        setTimeout(function() {\n          results.push(2);\n          next(null, 2);\n        }, 1)\n      }\n    })\n    .end(function(err, res) {\n      console.log(res); // => { foo: 1, bar: 2 }\n      console.log(results); // => [2, 1]\n    });\n\n### each\n\n    var chain = require('chain-tiny');\n\n    chain.each({ foo: 'bar', hoge: 'fuga'}, function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\n#### chain\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      next(null, { foo: 'bar', hoge: 'fuga'});\n    })\n    .each(function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\n#### parallel\n\n    var chain = require('chain-tiny');\n\n    chain.eachParallel({ foo: 'bar', hoge: 'fuga'}, function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\n#### Array\n\n    var chain = require('chain-tiny');\n\n    chain.eachParallel(['foo', 'bar'], function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => [ '0:foo', '1:bar' ]\n    });\n\n### wait\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      next(null, 'foo', 'bar');\n    })\n    .wait(100) // wait 100ms\n    .chain(function(foo, bar, next) {\n      console.log(foo) // => 'foo'\n      console.log(bar) // => 'bar'\n      next();\n    })\n    .end(function(err) {\n      //...\n    });\n","maintainers":[{"name":"hokaccha","email":"k.hokamura@gmail.com"}]},"0.2.1":{"name":"chain-tiny","description":"A simple control flow library.","version":"0.2.1","author":{"name":"Kazuhito Hokamura","email":"k.hokamura@gmail.com"},"repository":{"type":"git","url":"git://github.com/hokaccha/node-chain-tiny.git"},"devDependencies":{"nodeunit":">= 0.6.2"},"scripts":{"test":"nodeunit test"},"engines":{"node":">= 0.4.0"},"keywords":["flow","async","chain"],"main":"./index","_npmUser":{"name":"hokaccha","email":"k.hokamura@gmail.com"},"_id":"chain-tiny@0.2.1","dependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-beta-10","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"55c04c9a8b6c8eb2290ef3c9cd7b683822732b28","tarball":"https://registry.npmjs.org/chain-tiny/-/chain-tiny-0.2.1.tgz","integrity":"sha512-8U5AYjFWBEuSOF9HbHW4qfjnqtAHLy1LgkUrdhFByC62PTr8i6WO5hCjHzg941c2q8KoB9EJY+2JYveRHd8KWg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6/cZJAvfLATocl7TVNFw6CMKh4yXivPvyLexy3t0P+QIhAN9s7OUdO205KoB/Ud0qJMwlhmzGTlXWW/Z8irntAk7D"}]},"readme":"# node-chain-tiny\n\nA simple control flow library.\n\nThe problem which this library solves is the nest and error handling of callback.\n\nFor exsample.\n\n    asyncFunc1(function(err, result1) {\n      if (err) return callback(err);\n      // do something\n      asyncFunc2(function(err, result2) {\n        if (err) return callback(err);\n        // do something\n        asyncFunc3(function(err, result3) {\n          if (err) return callback(err);\n          // do something\n          callback(null, result);\n        });\n      });\n    });\n\nThis code becomes like this by using chain-tiny. \n\n    chain(function(next) {\n      asyncFunc1(next);\n    })\n    .chain(function(result1, next) {\n      // do something\n      asyncFunc2(next);\n    })\n    .chain(function(result2, next) {\n      // do something\n      asyncFunc3(next);\n    })\n    .end(function(err, result3) {\n      // do something\n      callback(err, result);\n    });\n\n## Install\n\n    $ npm install chain-tiny\n\n## Usage\n\n### simple\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      setTimeout(function() {\n        next(null, 'foo');\n      }, 100);\n    })\n    .chain(function(foo, next) {\n      console.log(foo); // => foo\n      setTimeout(function() {\n        next(null, 'bar', 'baz');\n      }, 1);\n    })\n    .end(function(err, bar, baz) {\n      console.log(bar); // => bar\n      console.log(baz); // => baz\n    });\n\n### error handling\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      next('Error!');\n    })\n    .chain(function(next) {\n      // not pass here\n      next(null, 'foo');\n    })\n    .end(function(err, foo) {\n      console.log(foo); // => undefined\n      console.log(err); // => Error!\n    });\n\n### parallel\n\n    var chain = require('chain-tiny');\n    var results = [];\n\n    chain.parallel({\n      foo: function(next) {\n        setTimeout(function() {\n          results.push(1);\n          next(null, 1);\n        }, 100);\n      },\n      bar: function(next) {\n        setTimeout(function() {\n          results.push(2);\n          next(null, 2);\n        }, 1)\n      }\n    })\n    .end(function(err, res) {\n      console.log(res); // => { foo: 1, bar: 2 }\n      console.log(results); // => [2, 1]\n    });\n\nchain:\n\n    var chain = require('chain-tiny');\n    var results = [];\n\n    chain(function(next) {\n      // do something\n      next();\n    })\n    .parallel({\n      foo: function(next) {\n        setTimeout(function() {\n          results.push(1);\n          next(null, 1);\n        }, 100);\n      },\n      bar: function(next) {\n        setTimeout(function() {\n          results.push(2);\n          next(null, 2);\n        }, 1)\n      }\n    })\n    .end(function(err, res) {\n      console.log(res); // => { foo: 1, bar: 2 }\n      console.log(results); // => [2, 1]\n    });\n\n### each\n\n    var chain = require('chain-tiny');\n\n    chain.each({ foo: 'bar', hoge: 'fuga'}, function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\nchain:\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      next(null, { foo: 'bar', hoge: 'fuga'});\n    })\n    .each(function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\nparallel:\n\n    var chain = require('chain-tiny');\n\n    chain.eachParallel({ foo: 'bar', hoge: 'fuga'}, function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\nArray:\n\n    var chain = require('chain-tiny');\n\n    chain.eachParallel(['foo', 'bar'], function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => [ '0:foo', '1:bar' ]\n    });\n","maintainers":[{"name":"hokaccha","email":"k.hokamura@gmail.com"}]},"0.2.2":{"name":"chain-tiny","description":"A simple control flow library.","version":"0.2.2","author":{"name":"Kazuhito Hokamura","email":"k.hokamura@gmail.com"},"repository":{"type":"git","url":"git://github.com/hokaccha/node-chain-tiny.git"},"devDependencies":{"nodeunit":">= 0.6.2"},"scripts":{"test":"nodeunit test"},"engines":{"node":">= 0.4.0"},"keywords":["flow","async","chain"],"main":"./index","_npmUser":{"name":"hokaccha","email":"k.hokamura@gmail.com"},"_id":"chain-tiny@0.2.2","dependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.6.19","_defaultsLoaded":true,"dist":{"shasum":"08d87888d9fc0173cbb4f841793f35788344d0f8","tarball":"https://registry.npmjs.org/chain-tiny/-/chain-tiny-0.2.2.tgz","integrity":"sha512-nBE66c5JzJwqKA5N1HkwdxOZZqp4Xuec2lFYFu6W4hZz0y++YJEXN6VYXIY6lKYzzK3kEXd/GoLJz5MVV7pfdg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFK1Ph5yz6PPxwY2W6hMknb7gaGEIaplKjdqn8PLhFA9AiAn1UjosgzmC/Q6O56j2HZAuaCvtjefOIz1ccNHP+E2Hg=="}]},"readme":"# node-chain-tiny\n\nA simple control flow library.\n\nThe problem which this library solves is the nest and error handling of callback.\n\nFor exsample.\n\n    asyncFunc1(function(err, result1) {\n      if (err) return callback(err);\n      // do something\n      asyncFunc2(function(err, result2) {\n        if (err) return callback(err);\n        // do something\n        asyncFunc3(function(err, result3) {\n          if (err) return callback(err);\n          // do something\n          callback(null, result);\n        });\n      });\n    });\n\nThis code becomes like this by using chain-tiny. \n\n    chain(function(next) {\n      asyncFunc1(next);\n    })\n    .chain(function(result1, next) {\n      // do something\n      asyncFunc2(next);\n    })\n    .chain(function(result2, next) {\n      // do something\n      asyncFunc3(next);\n    })\n    .end(function(err, result3) {\n      // do something\n      callback(err, result);\n    });\n\n## Install\n\n    $ npm install chain-tiny\n\n## Usage\n\n### simple\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      setTimeout(function() {\n        next(null, 'foo');\n      }, 100);\n    })\n    .chain(function(foo, next) {\n      console.log(foo); // => foo\n      setTimeout(function() {\n        next(null, 'bar', 'baz');\n      }, 1);\n    })\n    .end(function(err, bar, baz) {\n      console.log(bar); // => bar\n      console.log(baz); // => baz\n    });\n\n### using this.next\n\n    var chain = require('chain-tiny');\n\n    chain(function() {\n      var next = this.next;\n      setTimeout(function() {\n        next(null, 'foo');\n      }, 100);\n    })\n    .chain(function(foo) {\n      var next = this.next;\n      console.log(foo); // => foo\n      setTimeout(function() {\n        next(null, 'bar', 'baz');\n      }, 1);\n    })\n    .end(function(err, bar, baz) {\n      console.log(bar); // => bar\n      console.log(baz); // => baz\n    });\n\n### error handling\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      next('Error!');\n    })\n    .chain(function(next) {\n      // not pass here\n      next(null, 'foo');\n    })\n    .end(function(err, foo) {\n      console.log(foo); // => undefined\n      console.log(err); // => Error!\n    });\n\n### parallel\n\n    var chain = require('chain-tiny');\n    var results = [];\n\n    chain.parallel({\n      foo: function(next) {\n        setTimeout(function() {\n          results.push(1);\n          next(null, 1);\n        }, 100);\n      },\n      bar: function(next) {\n        setTimeout(function() {\n          results.push(2);\n          next(null, 2);\n        }, 1)\n      }\n    })\n    .end(function(err, res) {\n      console.log(res); // => { foo: 1, bar: 2 }\n      console.log(results); // => [2, 1]\n    });\n\nchain:\n\n    var chain = require('chain-tiny');\n    var results = [];\n\n    chain(function(next) {\n      // do something\n      next();\n    })\n    .parallel({\n      foo: function(next) {\n        setTimeout(function() {\n          results.push(1);\n          next(null, 1);\n        }, 100);\n      },\n      bar: function(next) {\n        setTimeout(function() {\n          results.push(2);\n          next(null, 2);\n        }, 1)\n      }\n    })\n    .end(function(err, res) {\n      console.log(res); // => { foo: 1, bar: 2 }\n      console.log(results); // => [2, 1]\n    });\n\n### each\n\n    var chain = require('chain-tiny');\n\n    chain.each({ foo: 'bar', hoge: 'fuga'}, function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\nchain:\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      next(null, { foo: 'bar', hoge: 'fuga'});\n    })\n    .each(function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\nor,\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      next(null);\n    })\n    .each({ foo: 'bar', hoge: 'fuga'}, function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\nparallel:\n\n    var chain = require('chain-tiny');\n\n    chain.eachParallel({ foo: 'bar', hoge: 'fuga'}, function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\nArray:\n\n    var chain = require('chain-tiny');\n\n    chain.eachParallel(['foo', 'bar'], function(key, val, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => [ '0:foo', '1:bar' ]\n    });\n","maintainers":[{"name":"hokaccha","email":"k.hokamura@gmail.com"}]},"0.3.0":{"name":"chain-tiny","description":"A simple control flow library.","version":"0.3.0","author":{"name":"Kazuhito Hokamura","email":"k.hokamura@gmail.com"},"repository":{"type":"git","url":"http://github.com/hokaccha/node-chain-tiny.git"},"devDependencies":{"nodeunit":">= 0.6.2"},"scripts":{"test":"nodeunit test"},"engines":{"node":">= 0.4.0"},"keywords":["flow","async","chain"],"main":"./index","readme":"# node-chain-tiny\n\nA simple control flow library.\n\nThe problem which this library solves is the nest and error handling of callback.\n\nFor exsample.\n\n    asyncFunc1(function(err, result1) {\n      if (err) return callback(err);\n      // do something\n      asyncFunc2(function(err, result2) {\n        if (err) return callback(err);\n        // do something\n        asyncFunc3(function(err, result3) {\n          if (err) return callback(err);\n          // do something\n          callback(null, result);\n        });\n      });\n    });\n\nThis code becomes like this by using chain-tiny. \n\n    chain(function(next) {\n      asyncFunc1(next);\n    })\n    .chain(function(result1, next) {\n      // do something\n      asyncFunc2(next);\n    })\n    .chain(function(result2, next) {\n      // do something\n      asyncFunc3(next);\n    })\n    .end(function(err, result3) {\n      // do something\n      callback(err, result);\n    });\n\n## Install\n\n    $ npm install chain-tiny\n\n## Usage\n\n### simple\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      setTimeout(function() {\n        next(null, 'foo');\n      }, 100);\n    })\n    .chain(function(foo, next) {\n      console.log(foo); // => foo\n      setTimeout(function() {\n        next(null, 'bar', 'baz');\n      }, 1);\n    })\n    .end(function(err, bar, baz) {\n      console.log(bar); // => bar\n      console.log(baz); // => baz\n    });\n\n### using this.next\n\n    var chain = require('chain-tiny');\n\n    chain(function() {\n      var next = this.next;\n      setTimeout(function() {\n        next(null, 'foo');\n      }, 100);\n    })\n    .chain(function(foo) {\n      var next = this.next;\n      console.log(foo); // => foo\n      setTimeout(function() {\n        next(null, 'bar', 'baz');\n      }, 1);\n    })\n    .end(function(err, bar, baz) {\n      console.log(bar); // => bar\n      console.log(baz); // => baz\n    });\n\n### error handling\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      next('Error!');\n    })\n    .chain(function(next) {\n      // not pass here\n      next(null, 'foo');\n    })\n    .end(function(err, foo) {\n      console.log(foo); // => undefined\n      console.log(err); // => Error!\n    });\n\n### parallel\n\n    var chain = require('chain-tiny');\n    var results = [];\n\n    chain.parallel({\n      foo: function(next) {\n        setTimeout(function() {\n          results.push(1);\n          next(null, 1);\n        }, 100);\n      },\n      bar: function(next) {\n        setTimeout(function() {\n          results.push(2);\n          next(null, 2);\n        }, 1)\n      }\n    })\n    .end(function(err, res) {\n      console.log(res); // => { foo: 1, bar: 2 }\n      console.log(results); // => [2, 1]\n    });\n\nchain:\n\n    var chain = require('chain-tiny');\n    var results = [];\n\n    chain(function(next) {\n      // do something\n      next();\n    })\n    .parallel({\n      foo: function(next) {\n        setTimeout(function() {\n          results.push(1);\n          next(null, 1);\n        }, 100);\n      },\n      bar: function(next) {\n        setTimeout(function() {\n          results.push(2);\n          next(null, 2);\n        }, 1)\n      }\n    })\n    .end(function(err, res) {\n      console.log(res); // => { foo: 1, bar: 2 }\n      console.log(results); // => [2, 1]\n    });\n\n### each\n\n    var chain = require('chain-tiny');\n\n    chain.each({ foo: 'bar', hoge: 'fuga'}, function(val, key, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\nchain:\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      next(null, { foo: 'bar', hoge: 'fuga'});\n    })\n    .each(function(val, key, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\nor,\n\n    var chain = require('chain-tiny');\n\n    chain(function(next) {\n      next(null);\n    })\n    .each({ foo: 'bar', hoge: 'fuga'}, function(val, key, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\nparallel:\n\n    var chain = require('chain-tiny');\n\n    chain.eachParallel({ foo: 'bar', hoge: 'fuga'}, function(val, key, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => { foo: 'foo:bar', hoge: 'hoge:fuga' }\n    });\n\nArray:\n\n    var chain = require('chain-tiny');\n\n    chain.eachParallel(['foo', 'bar'], function(val, key, next) {\n      setTimeout(function() {\n        next(null, key + ':' + val);\n      }, 1);\n    })\n    .end(function(err, results) { // or .chain(results, next)\n      console.log(results); // => [ '0:foo', '1:bar' ]\n    });\n","readmeFilename":"README.md","_id":"chain-tiny@0.3.0","dist":{"shasum":"58fa437f338a870b3576ccdf138bba854c5ce2f2","tarball":"https://registry.npmjs.org/chain-tiny/-/chain-tiny-0.3.0.tgz","integrity":"sha512-jKVw4iogBJnoryYZ0oroA6x8dEXm0LfV8sZqdxcASCLniQpok69Y2uPPJifF3+sQxpjf2djQy7juVF9wBgA33g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4kb1/hnwu374J53CvsBp7P7d6l1plmFcAwMDjMu55kAIhAP0xMdvf0Upse6FRRjXGkeKzPi5jNXEK8Ba/hF4u49BJ"}]},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"hokaccha","email":"k.hokamura@gmail.com"},"maintainers":[{"name":"hokaccha","email":"k.hokamura@gmail.com"}]}},"maintainers":[{"name":"hokaccha","email":"k.hokamura@gmail.com"}],"time":{"modified":"2022-06-13T05:51:31.786Z","created":"2011-10-10T06:56:02.275Z","0.1.0":"2011-10-10T06:56:04.634Z","0.1.1":"2011-10-10T08:00:12.985Z","0.1.2":"2011-10-17T03:20:47.837Z","0.1.3":"2011-11-10T06:02:55.694Z","0.2.0":"2012-03-17T12:54:33.008Z","0.2.1":"2012-03-17T14:22:09.437Z","0.2.2":"2013-02-13T02:51:40.694Z","0.3.0":"2013-08-30T08:09:20.464Z"},"author":{"name":"Kazuhito Hokamura","email":"k.hokamura@gmail.com"},"repository":{"type":"git","url":"http://github.com/hokaccha/node-chain-tiny.git"}}