Return the promises immediately (before resolving them). If you don't, the .when()
doesn't get a reference to the deferred object to know when it has been resolved.
$.when(calcQualifier()).then(function (status) {
$("#stuff").append(status);
return calcTotals(); // working function, not shown
}).then(function (status) {
$("#stuff").append("Complete");
});
function calcQualifier() {
var def = $.Deferred();
var serialized = "" //build json here (works fine)
$.when(calcQualifier_Post(serialized)).then(function (status) {
def.resolve("Qualifier Calculated <br/>");
});
return def.promise();
}
function calcQualifier_Post(serialized) {
var def = $.Deferred();
$.post("/Opportunity/CalculateQualifier/", serialized, function (returnJson) {
var qualifier = returnJson.Qualifier;
//update view with qualifier results
def.resolve(true);
});
return def.promise();
}