37 lines
		
	
	
		
			685 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			37 lines
		
	
	
		
			685 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # wrappy
 | ||
|  | 
 | ||
|  | Callback wrapping utility | ||
|  | 
 | ||
|  | ## USAGE
 | ||
|  | 
 | ||
|  | ```javascript | ||
|  | var wrappy = require("wrappy") | ||
|  | 
 | ||
|  | // var wrapper = wrappy(wrapperFunction) | ||
|  | 
 | ||
|  | // make sure a cb is called only once | ||
|  | // See also: http://npm.im/once for this specific use case | ||
|  | var once = wrappy(function (cb) { | ||
|  |   var called = false | ||
|  |   return function () { | ||
|  |     if (called) return | ||
|  |     called = true | ||
|  |     return cb.apply(this, arguments) | ||
|  |   } | ||
|  | }) | ||
|  | 
 | ||
|  | function printBoo () { | ||
|  |   console.log('boo') | ||
|  | } | ||
|  | // has some rando property | ||
|  | printBoo.iAmBooPrinter = true | ||
|  | 
 | ||
|  | var onlyPrintOnce = once(printBoo) | ||
|  | 
 | ||
|  | onlyPrintOnce() // prints 'boo' | ||
|  | onlyPrintOnce() // does nothing | ||
|  | 
 | ||
|  | // random property is retained! | ||
|  | assert.equal(onlyPrintOnce.iAmBooPrinter, true) | ||
|  | ``` |