asynx
v0.0.3
Published
Async utility extensions
Downloads
9
Readme
Async extensions
Adds several utilities on top of async.js. Aimed to be used as drop-in replacement:
var async = require('asynx');
// or be more explicit
var asynx = require('asynx');
Installation
npm install asynx
Usage
asynx.return(results..., callback)
Hijack callback into returning predefined result(s). Error is propagated unchanged.
asynx.waterfall([
// get response and body of an url
asynx.apply(request.get, url),
// write body to file, but return http response from waterfall
function (response, body, callback) {
fs.writefile(filename, asynx.return(response, callback))
}
], callback)
asynx.shift
asynx.waterfall([
// get response and body of an url
asynx.apply(request.get, url),
// throw away response and pass body to fs.writeFile
asynx.shift,
// write body to a file
asynx.apply(fs.writeFile, filename)
], callback)
asynx.if(test, then, else)
function cachedGet(url, callback) {
var filename = __dirname + '/cache/' + url.replace(/\//g, '#');
asynx.if(
asynx.apply(fs.exists, filename),
asynx.apply(fs.readFile, filename),
asynx.apply(asynx.waterfall, [
asynx.apply(request, url),
function (response, body, callback) {
fs.writeFile(filename, body, function (error) {
callback(error, body);
});
}
]),
callback
)
}
asynx.manual(states, callback)
function cachedGet(url, callback) {
var filename = __dirname + '/cache/' + url.replace(/\//g, '#');
asynx.manual({
// always starts from 'start' state
start: function (next) {
fs.exists(filename, function (exists) {
// go to some new state
if (exists) next.readCache()
else next.request();
});
},
request: function (next) {
// use state transition as callback
request(url, next.writeCache);
},
readCache: function (next) {
// use next.end to leave state machine
fs.readFile(filename, 'utf-8', next.end);
},
writeCache: function (response, body, next) {
fs.writeFile(filename, body, 'utf-8', function (error) {
next.end(error, body);
});
}
}, callback);
}