npmtest-generic-pool (v0.0.2)

Code coverage report for node-npmtest-generic-pool/node_modules/generic-pool/lib/ResourceRequest.js

Statements: 14.81% (4 / 27)      Branches: 0% (0 / 10)      Functions: 0% (0 / 8)      Lines: 14.81% (4 / 27)      Ignored: none     

All files » node-npmtest-generic-pool/node_modules/generic-pool/lib/ » ResourceRequest.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74    1 1   1                                                                                                                                   1    
'use strict'
 
const Deferred = require('./Deferred')
const errors = require('./errors')
 
function fbind (fn, ctx) {
  return function bound () {
    return fn.apply(ctx, arguments)
  }
}
 
/**
 * Wraps a users request for a resource
 * Basically a promise mashed in with a timeout
 * @private
 */
class ResourceRequest extends Deferred {
 
  /**
   * [constructor description]
   * @param  {Number} ttl     timeout
   */
  constructor (ttl, Promise) {
    super(Promise)
    this._creationTimestamp = Date.now()
    this._timeout = null
 
    if (ttl !== undefined) {
      this.setTimeout(ttl)
    }
  }
 
  setTimeout (delay) {
    if (this._state !== ResourceRequest.PENDING) {
      return
    }
    const ttl = parseInt(delay, 10)
 
    if (isNaN(ttl) || ttl <= 0) {
      throw new Error('delay must be a positive int')
    }
 
    const age = Date.now() - this._creationTimestamp
 
    if (this._timeout) {
      this.removeTimeout()
    }
 
    this._timeout = setTimeout(fbind(this._fireTimeout, this), Math.max(ttl - age, 0))
  }
 
  removeTimeout () {
    clearTimeout(this._timeout)
    this._timeout = null
  }
 
  _fireTimeout () {
    this.reject(new errors.TimeoutError('ResourceRequest timed out'))
  }
 
  reject (reason) {
    this.removeTimeout()
    super.reject(reason)
  }
 
  resolve (value) {
    this.removeTimeout()
    super.resolve(value)
  }
}
 
module.exports = ResourceRequest