1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- /**
- * Module dependencies.
- */
- var assert = require('assert');
- /**
- * Expose `thunkify()`.
- */
- module.exports = thunkify;
- /**
- * Wrap a regular callback `fn` as a thunk.
- *
- * @param {Function} fn
- * @return {Function}
- * @api public
- */
- function thunkify(fn){
- assert('function' == typeof fn, 'function required');
- return function(){
- var args = new Array(arguments.length);
- var ctx = this;
- for(var i = 0; i < args.length; ++i) {
- args[i] = arguments[i];
- }
- return function(done){
- var called;
- args.push(function(){
- if (called) return;
- called = true;
- done.apply(null, arguments);
- });
- try {
- fn.apply(ctx, args);
- } catch (err) {
- done(err);
- }
- }
- }
- };
|