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 />";
})
...