JQuery的deferred.done立即执行预定义的功能,而不是函数内部声明(JQuery de

2019-10-21 04:39发布

我的问题是一个奇怪的一个,如标题所述。 下面的代码:

情况1:

    var first = $.ajax({ // about 500ms request
        url: myUrl
        success: function() { console.log(1); }
    });

    var second = $.ajax({ // about 200 ms request
        url: myUrl
        success: function() { console.log(2); }
    });


    $.when(first, second).done(function() { console.log(3); });

日志2,1,3,所有的好,正是我想要的。

案例2:

    var first = $.ajax({ // about 500ms request
        url: myUrl
        success: function() { console.log(1); }
    });

    var second = $.ajax({ // about 200 ms request
        url: myUrl
        success: function() { console.log(2); }
    });

    function logthree() {
        console.log(3);
    }


    $.when(first, second).done(logthree());

原木3,2,1,这是一个问题。 该logthree()函数应该只执行一次第一和第二的决心。

为什么会出现这种情况? 我如何使用第2种情况没有任何问题?

注:同样的事情发生,如果第一和第二是功能,它们返回$阿贾克斯。

注:同样的事情发生,如果第一和第二都是$不用彷徨。

Answer 1:

改成:

$.when(first, second).done(logthree);

您正在执行logthree()并传递返回结果.done() 你需要传递一个函数引用.done()这仅仅是logthree没有括号。 当您添加括号,即指示JS解释立即执行它。 这是一个常见的错误。



Answer 2:

尝试这个..

`$。当(第一,第二).done(logthree);



文章来源: JQuery deferred.done executes predefined function instantly, but not function declared inside