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)
 | 
						|
```
 |