Non-blocking javascript code

Example of solution to make non-blocking long running javascript code

by xufocoder

JavaScript

function delay(ms) {
  const start = Date.now();
  let now = start;
  while (now - start < ms) {
    now = Date.now();
  }
}

function Processor() {
  this.sum = 0;
}

Processor.prototype.calculate = function(i) {
  this.sum += i;
  delay(10);
}

Processor.prototype.result = function() {
  return this.sum;
}

const calculate = (processor, times, callback) => {
	let i = 1;
  
  const tick = () => {
    if (i < times) {
    	processor.calculate(i);
      i++;
      setTimeout(tick);
    } else {
      callback();
    }
  }
  
  setTimeout(tick);
}

const processor = new Processor();

calculate(processor, 1000, () => {
	console.log(processor.result());
})