JQuery完成后不停止执行

时间:2018-02-16 11:22:05

标签: javascript jquery jquery-deferred

我有这段代码,而我想要做的只是在function1完成后才执行function0,因为返回了我需要的标志,但是我无法做到。 function0上的when()。done()总是在第一次运行时执行,并使我的其余代码执行。

function0总结

SELECT sno,dbase, SUBSTRING_INDEX(dbase, 'sims_', -1)temp
FROM school

function1总结

function0: function(e) {
        e.preventDefault();

        var valid = false;

        var dfd = $.Deferred();
        $.when(function1(e)).done(function(v){
            valid = v; // -> right here valid is undefined
            dfd.resolve();
        });

        dfd.promise();

        if(!valid) {
            alertSomething();
            return;
        }

        keepExecutingCode();
    },

我知道问题可能出在其他函数的延迟上,因为在function0内部,即使没有v值,它总是会解析,一旦到达function1: function(e){ e.preventDefault(); var df = $.Deferred(); var flag = true; App.resetDiv('#div'); getSomething(); getSomething2(); $.when(getSomething3()).done(function(){ $.when(getSomething4()).done(function(){ if (cond1()){ doSomething5(); if (cond2()){ $.when(doSomething6(),doSomething7()).done(function(var1, var2){ doSomething8(var1,var2); flag = true; updateSomething(); }); }else{ flag = false; updateSomething2(); } }else{ flag2 = false; showSomething(); flag3 = false; } df.resolve(flag); }); //PROBLEM 1 RIGHT HERE //df.promise(); //return flag; }); // it should be return df.promise(); }, 有效,它就是未定义的。

我做错了什么?

  

更新 - 已解决

if(!valid)

还必须将function1中的.done更改为.then

非常感谢;)

1 个答案:

答案 0 :(得分:1)

看起来你没有抓住你的延期错误事件。 (取决于你的jQuery-Version,)你可以用两种方式做到这一点:

  • 使用.fail - 回拨
    在这里,您在完成回调后添加它,以便您可以响应延迟
  • 的拒绝回调
  • 将.done替换为.then并使用第二个回调
    在这里,您只需将处理错误的函数插入到then-function
  • 的第二个参数中