Javascript - Delaying module return/declaration in Require.js?
http://stackoverflow.com/questions/18749604/javascript-delaying-module-return-declaration-in-require-js
by fiddlegrimbo
HTML
<script>
require = {
paths: {
"when": "https://rawgithub.com/cujojs/when/2.4.0/when"
}
};
</script>
<script src="http://requirejs.org/docs/release/2.1.8/comments/require.js"></script>
JavaScript
// --------------------------------------------------
// New module
// Using https://github.com/cujojs/when/wiki/Examples
// --------------------------------------------------
define("my-ajax", ["when"], function (when) {
// TODO - Fake id only for testing
var id = 0;
function makeFakeJSFiddleRequestData(fileName) {
var data = {
fileName: fileName
};
data = "json=" + encodeURI(JSON.stringify(data));
var delayInSeconds = Math.floor(8 * Math.random());
data += "&delay=" + delayInSeconds;
return data;
}
return function loadJSON(args) {
// Create the deferred response
var deferred = when.defer();
var xhr = new XMLHttpRequest();
xhr.overrideMimeType("application/json");
var url = args.fileName;
// TODO - Override URL only for testing
url = "/echo/json/";
// TODO - Provide request data and timings only for testing
var start = +new Date();
var data = makeFakeJSFiddleRequestData(args.fileName);
// TODO - POST for testing. jsfiddle expects POST.
xhr.open("POST", url, true);
xhr.onreadystatechange = function () {
// TODO - duration only for testing.
var duration = +new Date() - start + "ms";
if (xhr.readyState == 4) {
if (xhr.status === 200) {
// Check that response is valid JSON
var json;
try {
json = JSON.parse(xhr.responseText);
} catch (e) {
console.log("rejected", args, duration);
deferred.reject(e);
return;
}
console.log("resolved", args, duration);
// TODO - Fake id only for testing
json.id = ("id" + id++);
deferred.resolve(json);
} else...