func(opts, cb)のoptsを省略したい
2014年10月4日
JavaScript で
var foo = function(arg1, arg2, options, callback){};
という関数を
foo(arg1, arg2, callback);
こういう風に options を省略して呼べるようにしたいことが多々有ります。
この問題の解決に際して、
if (typeof options === 'function') {
callback = options;
options = {};
}
という感じに都度書いてもいいのですが、面倒だしテストも大変になるので、ちょっと便利になるものを作ってみました。
callback-end モジュール
– GitHub
– npm
– npm
var callbackEnd = require('callback-end');
var func = function(foo, bar, cb){
return Array.prototype.slice.apply(arguments);
};
var wrapped = callbackEnd(func);
console.log(
wrapped(1, 2, function(){}) // -> [1, 2, function(){}]
);
// 引数を省略すると、コールバックを除いた後ろの引数は省略扱いになる
// bar を省略して呼び出ししています
// 省略された引数には undefined が入る
console.log(
wrapped(1, function(){}) // -> [1, undefined, function(){}]
);
// foo と bar 両方省略して呼び出し
console.log(
wrapped(function(){}) // -> [undefined, undefined, function(){}]
);