JSFiddle - React, Tailwind, and code Playground

by Castrolol

JavaScript

//definition

function PromiseMe() {
    var self = this;
    var _successListeners = [];
    var _failListeners = [];
    var _promiseReturn = {
        done: function (cb) {
            _successListeners.push(cb);
            return this;
        },
        fail: function (cb) {
            _failListeners.push(cb);
            return this;
        },
        always: function (cb) {
            _successListeners.push(cb);
            _failListeners.push(cb);
            return this;
        },
        wait : function (cb) {
            
            var promise = new PromiseMe();
            
            this.done(function () {
                cb.apply(this, [function () {
                    promise.done.apply(promise, arguments);
                }, function () {
                    promise.fail.apply(promise, arguments);
                }].concat([].slice.call(arguments)));
            })
            
            return promise.getPromise();
            
        },
        then: function (cb) {
            
            var promise = new PromiseMe();
            
            this.done(function () {
                var selfPromise = cb.apply(this, arguments);
                selfPromise.done(function () { promise.done.apply(promise, arguments); });
                selfPromise.fail(function () { promise.fail.apply(promise, arguments); });
            });
            
            return promise.getPromise();
        }
    }
    this.thisObj = {};
    
    this.doneWait = function (wait) {
        
        var params = arguments;
        if (params.length > 0) {
            params = [].slice(params, 1);
        } else {
            params = [];
        }
        var self = this;
        setTimeout(function () {
            self.done.call(self, params);
        }, wait || 10);
    };
    
    this.failWait = function (wait) {
        
        var params = arguments;
        if (params.length > 0) {
            params = [].slice(params, 1);
        } else {
          ...