JSFiddle - React, Tailwind, and code Playground

by briancavalier

HTML

<script src="https://raw.github.com/cujojs/when/master/when.js"></script>
<script src="https://raw.github.com/kriskowal/q/master/q.js"></script>
<html>
<head>
</head>
<body>
</body>
</html>

JavaScript

// when.js Deferred
testRejectionPropagation(when.defer(), 'when.js');

// Q Deferred
testRejectionPropagation(Q.defer(), 'Q');

// jQuery Deferred
testRejectionPropagation($.Deferred(), 'jQuery');

function testRejectionPropagation(d, name) {
    thenable(d).then(
        function(val) {
            var d = $.Deferred();
            return d.reject(val+1); // 2
            //throw val + 1;
        }
    ).then(
        function(val) {
            // SHOULD NOT see this
            log(name + ': ' + val);
        },
        function(val) {
            return val + 1; // 3
        }
    ).then(
        function(val) {
            // Should see this, val === 3
            log(name + ': ' + val);
        }
    );

    d.resolve(1);

}

function thenable(d) {
    // Q's then is only on the promise
    return d.then ? d : d.promise;
}

function log(msg) {
    var p = document.createElement('p');
    p.innerHTML = msg;
    document.body.appendChild(p);
}