"use strict"; /** * This is apparently a bit like a Jquery deferred, hence the name */ class Deferred { constructor(Promise) { this._state = Deferred.PENDING; this._resolve = undefined; this._reject = undefined; this._promise = new Promise((resolve, reject) => { this._resolve = resolve; this._reject = reject; }); } get state() { return this._state; } get promise() { return this._promise; } reject(reason) { if (this._state !== Deferred.PENDING) { return; } this._state = Deferred.REJECTED; this._reject(reason); } resolve(value) { if (this._state !== Deferred.PENDING) { return; } this._state = Deferred.FULFILLED; this._resolve(value); } } // TODO: should these really live here? or be a seperate 'state' enum Deferred.PENDING = "PENDING"; Deferred.FULFILLED = "FULFILLED"; Deferred.REJECTED = "REJECTED"; module.exports = Deferred;