Jquery 可以在另一个延迟/承诺中嵌套$.post
我似乎有一些问题,将一篇文章嵌套在一个承诺中,而没有遇到时间问题(或者我认为它们是时间问题…)。在我的场景中,我需要在$.when()内触发一个Post,但它在完成之前无法继续/返回 我尝试过在有/没有嵌套$的情况下进行此操作,但仍然没有运气。我已将代码分解为1个部分,如我的$。当代码更大时:Jquery 可以在另一个延迟/承诺中嵌套$.post,jquery,promise,jquery-deferred,Jquery,Promise,Jquery Deferred,我似乎有一些问题,将一篇文章嵌套在一个承诺中,而没有遇到时间问题(或者我认为它们是时间问题…)。在我的场景中,我需要在$.when()内触发一个Post,但它在完成之前无法继续/返回 我尝试过在有/没有嵌套$的情况下进行此操作,但仍然没有运气。我已将代码分解为1个部分,如我的$。当代码更大时: $.when(calcQualifier()).then(function (status) { $("#stuff").append(status); return calcTotals
$.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();
});
}
$.when(calcQualifier()).then(函数(状态){
$(“#stuff”)。追加(状态);
return calcTotals();//工作函数,未显示
}).然后(功能(状态){
$(“#stuff”)。追加(“完成”);
});
函数计算器(){
var def=$.Deferred();
var serialized=”“//在此处构建json(工作正常)
$.when(calcQualifier\u Post(序列化)).then(函数(状态){
解析(“计算的限定符
”);
返回def.promise();
});
}
函数calcQualifier\u Post(序列化){
var def=$.Deferred();
$.post(“/Opportunity/CalculateEqualifier/”,序列化,
函数(返回JSON){
var qualifier=returnJson.qualifier;
//使用限定符结果更新视图
返回def.promise();
});
}
在上面的场景中,所有其他.then()项都可以正常启动,但是任何带有Post的项似乎都不会以正确的顺序启动
任何帮助都将不胜感激 立即归还承诺(在解决之前)。如果没有,则
.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();
}
$.when(calcQualifier()).then(函数(状态){
$(“#stuff”)。追加(状态);
return calcTotals();//工作函数,未显示
}).然后(功能(状态){
$(“#stuff”)。追加(“完成”);
});
函数计算器(){
var def=$.Deferred();
var serialized=”“//在此处构建json(工作正常)
$.when(calcQualifier\u Post(序列化)).then(函数(状态){
解析(“计算的限定符
”);
});
返回def.promise();
}
函数calcQualifier\u Post(序列化){
var def=$.Deferred();
$.post(“/Opportunity/calculateequalifier/”,序列化,函数(returnJson){
var qualifier=returnJson.qualifier;
//使用限定符结果更新视图
def.resolve(true);
});
返回def.promise();
}
感谢您的及时回复。这一直就在我的眼皮底下。您的评论不仅解决了我的问题,还帮助我理解了resolve、reject等功能。