旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

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

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(){}]
);