Basic Deferred Pattern

by Gerald Gillespie

JavaScript

/***** setup ****/
var desiredCallback = (resolve, reject) => {
  resolve('hi');
}

/*** code ***/
const resolve_proxy = (value) => {
  if (typeof valueCache.resolve === 'undefined') valueCache.resolve = value;
}


const resolver = (...values) => {
  let value;
  if (values.length)
    value = values[0];
  console.log(values.length)
  if (values.length === 0 && typeof valueCache.resolve !== 'undefined')
    value = valueCache.resolve;

  Trigger.resolve(value);
}

//Deferred setup
const valueCache = {
  resolve: undefined
}

const Trigger = {};

var callback = (resolve, reject) => {
  desiredCallback(resolve_proxy, reject);

  Trigger.resolve = resolve;
};

const setup = () => {
	valueCache.resolve = undefined;
  const Deferred = new Promise(callback).then(v => {
    if (v === 'hi') {
      console.log('the original requested value was used because no value was passwed to resolver', v);
    } else {
      console.log('something was passed to resolver so we used that instead', v)
    }
  })
}

/** comment the test you want to do */
setup();
resolver('force something new');

setup();
resolver();

setup();
resolver(undefined);