Jquery 可以在另一个延迟/承诺中嵌套$.post

Jquery 可以在另一个延迟/承诺中嵌套$.post,jquery,promise,jquery-deferred,Jquery,Promise,Jquery Deferred,我似乎有一些问题,将一篇文章嵌套在一个承诺中,而没有遇到时间问题(或者我认为它们是时间问题…)。在我的场景中,我需要在$.when()内触发一个Post,但它在完成之前无法继续/返回 我尝试过在有/没有嵌套$的情况下进行此操作,但仍然没有运气。我已将代码分解为1个部分,如我的$。当代码更大时: $.when(calcQualifier()).then(function (status) { $("#stuff").append(status); return calcTotals

我似乎有一些问题,将一篇文章嵌套在一个承诺中,而没有遇到时间问题(或者我认为它们是时间问题…)。在我的场景中,我需要在$.when()内触发一个Post,但它在完成之前无法继续/返回

我尝试过在有/没有嵌套$的情况下进行此操作,但仍然没有运气。我已将代码分解为1个部分,如我的$。当代码更大时:

$.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等功能。