JSFiddle - React, Tailwind, and code Playground

by blesh

JavaScript

// Promise 2

console.clear();

var aq = (function () {
    function defer() {
        return new Deferred();
    }

    function Deferred() {
        var success;
        var failure;

        var resolved = function (fn) {
            success = fn;
        };

        var rejected = function (fn) {
            failure = fn;
        };

        var promise = new Promise(resolved, rejected);

        this.resolve = function (val) {
            if (success) success(val);
        };

        this.reject = function (reason) {
            if (failure) failure(reason);
        };

        this.promise = function () {
            return promise;
        };
    }

    function Promise(resolved, rejected) {
        this.then = function (success, failure) {
            var d = new Deferred();

            resolved(function (val) {
                try {
                    var result = success(val);
                    d.resolve(result);
                } catch (err) {
                    d.reject(err.message);
                }
            });

            rejected(function (reason) {
                try {
                    var newReason = failure(reason);
                    d.reject(newReason);
                } catch (err) {
                    d.reject(err.message);
                }
            });

            return d.promise();
        };

        this.
        catch = function (handler) {
            var d = new Deferred();
            rejected(function (reason) {
                try {
                    var handled = handler(reason);
                    d.resolve(handled);
                } catch (err) {
                    d.reject(err.message);
                }
            });
            return d.promise();
        };
    }

    return {
        deferred: function () {
            return new Deferred();
        },
        reject: function (reason) {
            var d = new Deferred();
            setTimeout(function () {
                d.reject(reason);
...