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.
		
		
		
		
		
			
		
			
				
					
					
						
							36 lines
						
					
					
						
							842 B
						
					
					
				
			
		
		
	
	
							36 lines
						
					
					
						
							842 B
						
					
					
				'use strict' | 
						|
module.exports = inflight | 
						|
 | 
						|
let Bluebird | 
						|
try { | 
						|
  Bluebird = require('bluebird') | 
						|
} catch (_) { | 
						|
  Bluebird = Promise | 
						|
} | 
						|
 | 
						|
const active = {} | 
						|
inflight.active = active | 
						|
function inflight (unique, doFly) { | 
						|
  return Bluebird.all([unique, doFly]).then(function (args) { | 
						|
    const unique = args[0] | 
						|
    const doFly = args[1] | 
						|
    if (Array.isArray(unique)) { | 
						|
      return Bluebird.all(unique).then(function (uniqueArr) { | 
						|
        return _inflight(uniqueArr.join(''), doFly) | 
						|
      }) | 
						|
    } else { | 
						|
      return _inflight(unique, doFly) | 
						|
    } | 
						|
  }) | 
						|
 | 
						|
  function _inflight (unique, doFly) { | 
						|
    if (!active[unique]) { | 
						|
      active[unique] = (new Bluebird(function (resolve) { | 
						|
        return resolve(doFly()) | 
						|
      })) | 
						|
      active[unique].then(cleanup, cleanup) | 
						|
      function cleanup() { delete active[unique] } | 
						|
    } | 
						|
    return active[unique] | 
						|
  } | 
						|
}
 | 
						|
 |