value changing Deferred pattern II -simpler

a deferred pattern where you provide an original callback but then can change the value returned (if the promise is still pending)...

by Gerald Gillespie

JavaScript

/***** setup ****/
var desiredCallback = (resolve, reject) => {
	console.log('already started');
  setTimeout(()=>{
  	resolve('hi');
  },Math.random()*5000);
  
}

/*** 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 (typeof valueCache.resolve === 'undefined') valueCache.resolve = value;
  
  
  if (values.length === 0 )
    value = valueCache.resolve;

	if(Trigger.nativeResolve)
  	Trigger.nativeResolve(value);
}

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

const Trigger = {};

var callback = (resolve, reject) => {  
desiredCallback(resolver, reject);
 Trigger.nativeResolve = 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);