undozen
2014-05-10 09:58:56 +08:00
类似的情况,tj 的代码中经常会有判断函数的 arity 来给不同反应的,也就是函数对象的 length 属性,也就是说比如
function (a, b, c) {}
定义时括号中指定了三个参数,那么这个函数的 arity 就是三。
tj 代码中常通过 arity 来给不同回调。刚才说到的 superagent,如果回调的 arity ==1 就 callback(response); 如果是 2 或以上,就照 node 的惯例 callback(err, response)
express 中也是,middleware arity 如果是 3 或一下,就是 middleware(req, res, next); 这样,而如果是 4 或以上就说明它是一个处理错误的 middleware,这样去调用 middleware(err, req, res, next)
我觉得根据 arity 来做不同反应真不算是优雅的解决方案。