You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.js 767B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /**
  2. * Module dependencies.
  3. */
  4. var assert = require('assert');
  5. /**
  6. * Expose `thunkify()`.
  7. */
  8. module.exports = thunkify;
  9. /**
  10. * Wrap a regular callback `fn` as a thunk.
  11. *
  12. * @param {Function} fn
  13. * @return {Function}
  14. * @api public
  15. */
  16. function thunkify(fn){
  17. assert('function' == typeof fn, 'function required');
  18. return function(){
  19. var args = new Array(arguments.length);
  20. var ctx = this;
  21. for(var i = 0; i < args.length; ++i) {
  22. args[i] = arguments[i];
  23. }
  24. return function(done){
  25. var called;
  26. args.push(function(){
  27. if (called) return;
  28. called = true;
  29. done.apply(null, arguments);
  30. });
  31. try {
  32. fn.apply(ctx, args);
  33. } catch (err) {
  34. done(err);
  35. }
  36. }
  37. }
  38. };