ChainableJS - Async Chainable Methods
Write Chainable Methods and Avoid Callback Hell in NodeJS / Javascript
Example
For example you have 3 tasks:
function read (topic, time, next) {
if (time < 100) {
next(new Error('Not enough time to READ about ' + topic))
} else {
setTimeout(function () {
next(null, 'READ alot about ' + topic)
}, time)
}
}
function write (topic, pages, next) {
next(null, 'WROTE ' + pages + ' pages: ' + topic)
}
function zen (time, next) {
console.log('Zen time... ', time)
setTimeout(function () {
next(null, 'Energy recovered!')
}, time)
}
The callback way to do tasks synchronously:
read('AI', 1200, function (err, result) {
read('Blockchain', 900, function (err, result) {
write('about Callback Hell', 100, function (err, result) {
zen(500, function (err, result) {
console.log('Made my day')
})
})
})
})
The Chainable Methods Way:
var Chainable = require('chainablejs')
var myday = new Chainable()
myday
.chainable('readAbout', read)
.chainable('writeBlog', write)
.chainable('zentime', zen)
.readAbout('AI', 1200)
.readAbout('Blockchain', 900)
.writeBlog('about Callback Hell', 100)
.zentime(500)
.done(function (results) {
console.log(results, 'Made my day')
})
Api
- then()
- results()
- lastResult()
- catch()
- done()
myday
.writeBlog('about Callback Hell', 100)
.then(function (next) {
console.log(myday.lastResult())
next()
})
.zentime(500)
.then(function (next) {
console.log(myday.results())
next()
})
.catch(function (error, results) {
console.log(error)
console.log(results)
})
.done(function (results) {
console.log(results, 'Made my day')
})