sample dispatcher

dispatch test by sync/async

by aloerina

HTML

<button id="button">
  dispatch
</button>

JavaScript

class Dispatcher {
  constructor() {
    this._prefix = 0;
    this.isDispatching = false;
  }
  dispatch({ payload = 1, name }) {
    if (this.idDispatching) {
      throw new Error('dispatching');
    }
    this._prefix++;
    this.isDispatching = true;
    for (let i = 0; i < payload; i++) {
    	console.log(`[${this._prefix}_${name}]callback ${i+1}回目`);
      callback();
    }
    this.isDispatching = false;
	}
}

const callback = (delay = 1000) => {
  let current = performance.now();
  const end = current + delay;
  console.log(`  start: ${current}`);
  while (current < end) {
  	current = performance.now();
  }
  console.log(`  end  : ${current}`);
}

// =================================

const dispatcher = new Dispatcher();

const button = document.getElementById('button');
button.addEventListener('click', () => { dispatcher.dispatch({payload:3, name:'button'}) });


setTimeout(() => {
  dispatcher.dispatch({payload:5, name:'first'});
});

setTimeout(() => {
  dispatcher.dispatch({payload:5, name:'second'});
}, 0);
dispatcher.dispatch({payload:3, name:'third'});