Simple when/then promise

Demonstrates jQuery Deferred object usage in a simple binary workflow.

by samdelagarza

HTML

<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
<!-- no html here --> 
<strong>In 2 seconds we will confirm your order.</strong>

JavaScript

var
    order = { symbol: 'AAPL', bid: 580 },
    simAjax = function (toConsole) {
        console.log('sending: ', toConsole);
        setTimeout(function () {
            console.log('complete: ', toConsole);
        }, 2500);
        // regular ajax will return a promise object
    },
    orderIsConfirmed = function (order) {
        var deferred = new $.Deferred(),
            promise = deferred.promise();

        // wait for the page to load
        setTimeout(function () {
            console.log('confirming order');
            var orderJson = JSON.stringify(order);
            if (confirm('Confirm order: \n' + orderJson)) {
                deferred.resolve(orderJson);                
            } else {
                deferred.reject('order rejected');
            }
        }, 2000);

        return promise;
    },
    sendAcceptedOrder = function (orderJson) {
        simAjax('sending confirmed order for: ' + orderJson);
    },
    orderCancelled = function (whyCancelled) {
        console.log(whyCancelled);
    };

$.when(
    orderIsConfirmed(order)
).then(
    sendAcceptedOrder,
    orderCancelled
);