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.
		
		
		
		
		
			
		
			
				
					38 lines
				
				991 B
			
		
		
			
		
	
	
					38 lines
				
				991 B
			| 
											3 years ago
										 | # 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) | ||
|  | ``` |