JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://amatiasq.com/fiddle-console.js"></script>

JavaScript

function Promise() {
  this._callbacks = [];
}

Promise.prototype.then = function(callback)  {
    if (typeof callback !== 'function') {
        throw new Error("[Promise.then] El argumento 'callback' no es una función " + typeof callback);
    }
    
    this._callbacks.push(callback);
};

Promise.prototype.done = function() {
    var callback;
    for (var i = 0; i < this._callbacks.length; i++) {
        callback = this._callbacks[i];
        callback();
    }
};

function esperarUnSegundo() {
    var promise = new Promise();
    // Hacemos un timeout a mil milisegundos
    setTimeout(function() {
        promise.done();
    }, 2000);
    return promise;
}

console.log('Empieza la espera...');
esperarUnSegundo().then(function() {
    console.log("Ha pasado dos segundos =D");
});