Multiple asynchronous requests with jQuery

by b_long

HTML

<body class="put-stuff-here">
     <h4><u>Log</u></h4>

</body>

JavaScript

var logIt = function (msg) {
    $(".put-stuff-here").append("<pre>" + ((new Date()).toLocaleTimeString()) + ": " + msg + "</pre>"); // && console.log(...);
}, pauseBrowser = function (ms) {
    ms += new Date().getTime();
    while (new Date() < ms) {}
}, dataForService1 = {
    json: JSON.stringify({
        serviceNumber: 1,
        description: "Service #1's data",
        pauseAfterward: 3 // for pausing the client-side
    }),
    delay: 0 // delay on the server-side
}, dataForService2 = {
    json: JSON.stringify({
        serviceNumber: 2,
        description: "Service #2's data",
        pauseAfterward: 1
    }),
    delay: 0 // delay on the server-side
};

function getAjaxConfiguration(optionalDfdObj) {
    return {
        type: 'POST',
        url: '/echo/json/',
        success: function (data) {
            var msg = "Handling service #" + data.serviceNumber + "'s success";
            logIt(msg); // , console.error(msg);
            logIt(JSON.stringify(data));
            if (typeof optionalDfdObj !== "undefined") {
                logIt("Resolving optionalDfdObj");
                optionalDfdObj.resolve(data);
            }
        }
    };
}

var async2 = function () {
    var ajaxConfig = $.extend(getAjaxConfiguration(), {
        data: dataForService2
    });
    return $.ajax(ajaxConfig);
};

var async1 = function () {
    var ajaxConfig = $.extend(getAjaxConfiguration(), {
        data: dataForService1
    });
    return $.ajax(ajaxConfig);
};

var do2AsynchronousFunctions = function () {
    var dfd = new $.Deferred();

    async1()
    .then(function (async1ResponseData) {
        logIt("async1's then() method called, waiting " + async1ResponseData.pauseAfterward + " seconds");
        pauseBrowser(async1ResponseData.pauseAfterward * 1000);
    })
    .done(function (a1d) {
        logIt("async1's done() method was called");
        return async2()
        .then(function (async2ResponseData) {
            logIt("async2's then() method...