38 lines
		
	
	
		
			991 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			38 lines
		
	
	
		
			991 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # inflight
 | ||
|  | 
 | ||
|  | Add callbacks to requests in flight to avoid async duplication | ||
|  | 
 | ||
|  | ## USAGE
 | ||
|  | 
 | ||
|  | ```javascript | ||
|  | var inflight = require('inflight') | ||
|  | 
 | ||
|  | // some request that does some stuff | ||
|  | function req(key, callback) { | ||
|  |   // key is any random string.  like a url or filename or whatever. | ||
|  |   // | ||
|  |   // will return either a falsey value, indicating that the | ||
|  |   // request for this key is already in flight, or a new callback | ||
|  |   // which when called will call all callbacks passed to inflightk | ||
|  |   // with the same key | ||
|  |   callback = inflight(key, callback) | ||
|  | 
 | ||
|  |   // If we got a falsey value back, then there's already a req going | ||
|  |   if (!callback) return | ||
|  | 
 | ||
|  |   // this is where you'd fetch the url or whatever | ||
|  |   // callback is also once()-ified, so it can safely be assigned | ||
|  |   // to multiple events etc.  First call wins. | ||
|  |   setTimeout(function() { | ||
|  |     callback(null, key) | ||
|  |   }, 100) | ||
|  | } | ||
|  | 
 | ||
|  | // only assigns a single setTimeout | ||
|  | // when it dings, all cbs get called | ||
|  | req('foo', cb1) | ||
|  | req('foo', cb2) | ||
|  | req('foo', cb3) | ||
|  | req('foo', cb4) | ||
|  | ``` |