asynx

Async utility extensions

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');
npm install asynx

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 (responsebodycallback) {
        fs.writefile(filename, asynx.return(response, callback))
    }
], callback)
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)
function cachedGet(urlcallback) {
    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 (responsebodycallback) {
                fs.writeFile(filename, body, function (error) {
                    callback(error, body);
                });
            }
        ]),
        callback
    )
}
function cachedGet(urlcallback) {
    var filename = __dirname + '/cache/' + url.replace(/\//g, '#');
 
    asynx.manual({
        // always starts from 'start' state 
        startfunction (next) {
            fs.exists(filename, function (exists) {
                // go to some new state 
                if (exists) next.readCache()
                else next.request();
            });
        },
        requestfunction (next) {
            // use state transition as callback 
            request(url, next.writeCache);
        },
        readCachefunction (next) {
            // use next.end to leave state machine 
            fs.readFile(filename, 'utf-8', next.end);
        },
        writeCachefunction (responsebodynext) {
            fs.writeFile(filename, body, 'utf-8', function (error) {
                next.end(error, body);
            });
        }
    }, callback);
}