JSFiddle - React, Tailwind, and code Playground

by lega911

JavaScript

let lines = [];
class Promise extends window.Promise {
	constructor(fn) {
  	super(fn);
  	for(let l of lines) l.push(this);
  }
}

Promise.wait = function(fn) {
  let line = [];
  lines.push(line);
  let result = fn();
  lines.splice(lines.indexOf(line), 1);
  return Promise.all(line).then(() => result);
}

// example

const delay = (x) => {
	console.log('delay', x);
	return new Promise((resolve) => setTimeout(resolve, x));
}

const delay1sec = () => {
	return Promise.wait(() => {
  	delay(1000);
  }).then(() => {console.log('1 sec finished')})
}

Promise.wait(() => {
	console.log('start');
	delay(1500);
	delay1sec();
	return Date.now();  
}).then((start) => console.log('finished', Date.now() - start));