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'});