JSFiddle - React, Tailwind, and code Playground

HTML

<a href="#">Click Me</a>

JavaScript

function wait_promise(time, param){
	return new Promise(function(resolve, reject){
		setTimeout(function(param){
			resolve(param);
		}, time, param)
	});
}

function click_promise(el, param){
	return new Promise(function(resolve, reject){
		el.addEventListener("click", function(e){
            el.removeEventListener(e.type, arguments.callee)
			resolve(param);
		})
	})
}

function handle(el, h){
  click_promise(el)
  .then(function(){
    return Promise.race([
      wait_promise(700, 1),
      click_promise(el, 2)
    ])
  }).then(function(n){
    h(n)
    handle(el, h)
  })
}

var el=document.querySelector("a")
handle(el, alert)