JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/2.9.3/bluebird.min.js"></script>

JavaScript

function getTimestamp() {
    return new Date().getTime();   
}

function makeCallWith3SecondLatency(cb) {
    console.log('mocking a call with 3 second latency...');
    var mockResult = 'the result';
    setTimeout(function() {
        cb(mockResult);
    }, 3000);
}

function doSomethingAsync(minDelay) {
    return new Promise(function(resolve) {
        var calledAt = getTimestamp();
        makeCallWith3SecondLatency(function(arg) {
            var actualDelay = getTimestamp() - calledAt;
            if(actualDelay < minDelay) {
                var artificialDelay = minDelay - actualDelay;
                console.log('artificially delay another ' + artificialDelay + ' millis');
                setTimeout(function() { resolve(arg); }, artificialDelay);
            } else {
                resolve(arg);
            }
        });
    });
}

function printResult(result) {
    console.log('result: ' + result)   
}

var minDelay = 5000;
doSomethingAsync(minDelay).then(printResult);