|
|
- '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]
- }
- }
|