我似乎遇到了一些问题,在一个承诺中嵌入一个帖子而不会遇到时间问题(或者我认为它们是时间问题......)。在我的场景中,我需要在$ .when()内触发一个帖子,但是在完成之前它不能继续/返回。
对于Post,我有/没有嵌套$ .when的尝试,但我仍然没有运气。我把我的代码分解为只有1个部分,因为我的$ .when要大得多:
$.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
return def.promise();
});
}
在上面的场景中,所有其他.then()项目都可以正常启动,但是任何带有Post的内容似乎都没有以正确的顺序触发。
任何帮助将不胜感激!
答案 0 :(得分:2)
立即归还承诺(在解决之前)。如果不这样做,.when()
不会获得对延迟对象的引用,以便知道它何时被解析。
$.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();
}