Q.js promise test

by Neeraj

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/q.js/0.9.6/q.js"></script>
<OL>
    <LI>Fulfilled, fulfillment handler returns a value: simple functional transformation
        <LI>Fulfilled, fulfillment handler throws an exception: getting data, and throwing an exception in response to it
            <LI>Rejected, rejection handler returns a value: a catch clause got the error and handled it
                <LI>Rejected, rejection handler throws an exception: a catch clause got the error and re-threw it (or a new one)</OL>

<h3>scenario 1</h3>

<div id="scenario1"></div>

<h3>scenario 2</h3>

<div id="scenario2"></div>

<h3>scenario 3</h3>

<div id="scenario3"></div>

<h3>scenario 4</h3>

<div id="scenario4"></div>

JavaScript

var scenario1 = document.getElementById("scenario1"),
    scenario2 = document.getElementById("scenario2"),
    scenario3 = document.getElementById("scenario3"),
    scenario4 = document.getElementById("scenario4");

window.onerror = function (err) {
    console.log(arguments);
    alert("unhandled error: " + err);
    return true;
};

function getPromise() {
    var dfd = Q.defer();
    console.log("deferred created");
    setTimeout(function () {
        console.log("deferred resolved");
        dfd.resolve("resolved");
    }, 500);
    return dfd.promise;
}

function getRejectedPromise() {
    var dfd = Q.defer();
    console.log("deferred created");
    setTimeout(function () {
        console.log("deferred rejected");
        dfd.reject("resolved");
    }, 500);
    return dfd.promise;
}

function getErrorPromise() {
    var dfd = Q.defer();
    console.log("deferred created");
    setTimeout(function () {
        console.log("deferred error");
        throw "error in promise";
    }, 500);
    return dfd.promise;
}

try {
    //Scenario 1
    getPromise()
        .then(function () {
        scenario1.innerHTML += "resolve<br />";
        return 1;
    })
        .then(function (value) {
        scenario1.innerHTML += "handle passed value: " + value + " <br />";
    });

    //Scenario 2
    getPromise()
        .then(function () {
        scenario2.innerHTML += "error<br />";
        throw "Not Implemented Exception";
    }, function () {
        scenario2.innerHTML += "error landed in fail callback<br />";
    })
        .fail(function (error) {
        scenario2.innerHTML += "handling error:" + error + " <br />";
        return true;
    });

    //Scenario 3
    getRejectedPromise()
        .then(undefined, function () {
        scenario3.innerHTML += "handled rejection" + " <br />";
        return "handled";
    })
        .then(function (value) {
        scenario3.innerHTML += "handle rejected passed value: " + value + " <br />";
    })
       ...