Sometime, you need to control the arity of your callbacks.
Did you ever find yourself writing shitty code such as this one:
someShittyFunction(function(err, uselessArgument, anotherUselessArgument) {
cb(err);
});
To minimize the quantity of arguments sent over to your next function (async.waterfall
anyone?)
rarity
allow you to easily control this behavior:
// Generate a wrapper function around cb, only forwarding the first parameter.
someShittyFunction(rarity(1, cb));
rarity(maxNumberOfArgumentsToForward, cb)
var async = require('async');
async.waterfall([
function callShittyLib(cb) {
someShittyFunction(cb);
},
function handleResults(result, uselessArgument, anotherUselessArgument, cb) {
// When writing your function, you need to check the documentation regarding the number of arguments you'll receive.
// Boring.
stuff();
cb();
}
], process.exit);
var async = require('async');
var rarity = require('rarity');
async.waterfall([
function callShittyLib(cb) {
// Slice after the two first arguments
someShittyFunction(rarity(2, cb));
},
function handleResults(result, cb) {
stuff();
cb();
}
], process.exit);
When using some shitty-backported lib, for instance factory-lady
, you'll need to pad your queries with a first additional argument representing a fake error, making it compatible with all the node ecosystem.
The following code:
someShittyFunction(function(result) {
cb(null, result);
});
Now becomes:
// Wraps cb with a new function, sending null as the first argument.
someShittyFunction(rarity.pad([null], cb));
rarity.pad(arrayOfArgumentsToPad, cb)
Here is some cumbersome code:
function(cb) {
var aVar = 1;
someFunction(function(err, result) {
cb(err, aVar, result);
})
}
This is shitty to write. Here is some improved version:
function(cb) {
var aVar = 1;
someFunction(rarity.carry([aVar], cb));
}
Arguments passed in the array will be carried between the first argument of the original callback (the error) and all the others.
rarity.carry(arrayOfArgumentsToAddBetweenErrorAndOriginal, cb)
npm install rarity
You're done. Now go write some shitty code.
rarity
is short for reduce arity
.
Also, arity was already created on npm.