jQuery不停止执行时



我有这一点的代码,我想做的就是仅在函数1完成后才执行函数0,但我无法执行它。function0上的wher((。done((始终在第一次运行中执行,并使我的代码执行其余部分。

函数0总结

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();
    },

函数1总结

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();
        },

我知道问题可能是在其他函数上的延期,因为Inside yness insund insund off v alution始终执行解决方案,并且一旦到达if(!valid)有效。

我在做什么错?

更新 - 已解决

function0: function(e) {
    e.preventDefault();
    var valid = false;
    var dfd = $.Deferred();
    //$.when(function1(e)).done(function(v){
    // had to change .done to .then
    $.when(function1(e)).then(function(v){
        valid = v; // -> right here valid is undefined
        if(!valid) {
            alertSomething();
            return;
        }
        // had to change the scope and make it inside the .then so that it only executes when I have the value
        keepExecutingCode();
        dfd.resolve();
    });
    dfd.promise();

},

还必须将两个.done的功能1更改为.。

非常感谢;(

看起来您没有捕获递延的错误事件。(取决于您的jQuery-version(,您可以通过两种方式执行此操作:

  • 使用.fail-callback
    在这里,您可以将其添加后,以便您可以响应您递延的拒绝反驳
  • 替换为.done。然后使用第二个回调
    在这里,您只需将函数插入以将错误处理到当时功能的第二个参数

最新更新