Created
March 23, 2015 16:50
-
-
Save raoulmillais/11013f1e495355c784df to your computer and use it in GitHub Desktop.
Waterfall stolen from async-waterfall with multi-environment boilerplate removed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
waterfall([ | |
function createBasket(cb) { | |
api.Basket().create({ artistid: 1 }, function processReleases(err, res) { | |
if (err) { return cb(err); } | |
basketId = res.basket.id; | |
console.log('Created basket', basketId); | |
return cb(); | |
}); | |
}, | |
function addToBasket(cb) { | |
api.Basket().addItem({ | |
basketId: basketId, | |
releaseId: 769006, | |
trackId: 13166687 // Test content | |
}, function (err, res) { | |
if (err) { return cb(err); } | |
console.log('Added to basket: ', res.basket.basketItems[0]); | |
return cb(); | |
}); | |
}, | |
function applyVoucher(cb) { | |
api.Basket().applyVoucher({ | |
basketId: basketId, | |
voucherCode: voucherCode | |
}, function (err, res) { | |
if (err) { return cb(err); } | |
console.log('Applied voucher to: ', res.basket.basketItems[0]); | |
return cb(); | |
}); | |
} | |
], function (err) { | |
if (err) { throw err; } | |
console.log('Example completed successfully'); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var makeIterator = function (tasks) { | |
var makeCallback = function (index) { | |
var fn = function () { | |
if (tasks.length) { | |
tasks[index].apply(null, arguments); | |
} | |
return fn.next(); | |
}; | |
fn.next = function () { | |
return (index < tasks.length - 1) ? makeCallback(index + 1): null; | |
}; | |
return fn; | |
}; | |
return makeCallback(0); | |
}; | |
var waterfall = function (tasks, callback) { | |
callback = callback || function () {}; | |
if (!Array.isArray(tasks)) { | |
var err = new Error('First argument to waterfall must be an array of functions'); | |
return callback(err); | |
} | |
if (!tasks.length) { | |
return callback(); | |
} | |
var wrapIterator = function (iterator) { | |
return function (err) { | |
if (err) { | |
callback.apply(null, arguments); | |
callback = function () {}; | |
} else { | |
var args = Array.prototype.slice.call(arguments, 1); | |
var next = iterator.next(); | |
if (next) { | |
args.push(wrapIterator(next)); | |
} else { | |
args.push(callback); | |
} | |
setImmediate(function () { | |
iterator.apply(null, args); | |
}); | |
} | |
}; | |
}; | |
wrapIterator(makeIterator(tasks))(); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment