JSFiddle - React, Tailwind, and code Playground

JavaScript

MyPromise = function (callback) {
    this._pending = [];
    this.PENDING = "pending";
    this.RESOLVED = "resolved";
    this.REJECTED = "rejected";
    this.PromiseState = this.PENDING;
    this._catch = function (error) {
        console.error(error);
    };
    setTimeout(function () {
        try {
            callback.call(this, this.resolve.bind(this), this.reject.bind(this));
        } catch (error) {
            this.reject(error);
        }
    }.bind(this), 0)
};
MyPromise.prototype.resolve = function (object) {
    if (this.PromiseState !== this.PENDING) return;
    while (this._pending.length > 0) {
        var callbacks = this._pending.shift();
        try {
            var resolve = callbacks.resolve;
            if (resolve instanceof MyPromise) {
                resolve._pending = resolve._pending.concat(this._pending);
                resolve._catch = this._catch;
                resolve.resolve(object);
                return resolve;
            }
            object = resolve.call(this, object);
            if (object instanceof MyPromise) {
                object._pending = object._pending.concat(this._pending);
                object._catch = this._catch;
                return object;
            }
        } catch (error) {
            (callbacks.reject || this._catch).call(this, error);
            return;
        }
    }
    this.PromiseState = this.RESOLVED;
    return object;
};
MyPromise.prototype.reject = function (error) {
    if (this.PromiseState !== this.PENDING) return;
    this.PromiseState = this.REJECTED;
    try {
        this._catch(error);
    } catch (e) {
        console.error(error, e);
    }
};
MyPromise.prototype.then = function (onFulfilled, onRejected) {
    onFulfilled = onFulfilled || function (result) {
        return result;
    };
    this._catch = onRejected || this._catch;
    this._pending.push({resolve: onFulfilled, reject: onRejected});
    return this;
};
MyPromise.prototype.catch = function (onRejected)...