JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://dl.dropboxusercontent.com/u/7909102/log.js"></script>
<button id="run">Press this multiple times</button><br><br>

JavaScript

function delay(val) {
    console.log("start: ", val);
    return new Promise(function(resolve)  {
        setTimeout(function() {
            console.log("end: ", val); 
            resolve();
        }, 500);
    });
}

// initialize p to a resolved promise
var p
, v = 1
, promiseFulfilled = true;



function addPromise() {
    if(!p || promiseFulfilled){
        console.log('reseting promise...');
        p = Promise.resolve();
    }
    p = p.then(function() {
        promiseFulfilled = false;
        return delay(v++);
    }).then(function(){
        promiseFulfilled = true;
    });
}


document.getElementById('run').onclick = addPromise;