2个函数完成后在JQuery中执行函数

时间:2016-07-26 14:34:37

标签: jquery

我一整天都在努力解决这个问题,并且无法弄清楚如何在两个函数结果上执行继电器功能,并在两个函数完成后立即执行。

我试过这样做:

$.when(SetCountryAndLanguage(), GetUserRoles()).done(SetInlineManualTracking());

但是在没有等待2个功能完成工作的情况下立即转到SetInlineManualTracking()。 在保持异步优势的同时完成两个函数后,如何执行第三个函数?

这是功能编号1:

 //Gets the country the user is in and later set the player language.
            function SetCountryAndLanguage() {
                $.get("http://ipinfo.io", function() {}, "jsonp").
                    done(function(response) {
                        inlineCountry = response.country;
                    }).
                    done(SetInlineManualLanguage);
            }

功能编号2:

//Gets the user roles from the db and update the tracking.
            function GetUserRoles() {
                debugger;
                $.ajax({
                        type: "POST",
                        url: "../Publisher/Service.asmx/SelectUserRoles",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json"
                    }).
                    done(UpdateRoles);
            }

第三个功能取决于其他两个先前的功能:

function SetInlineManualTracking() {
                debugger;
                //<!-- User tracking data -->
                window.inlineManualTracking = {
                    uid: inlineUid, // Only this field is mandatory
                    email: Cookies.get('email'),
                    username: inlineUserName,
                    name: Cookies.get('name'),
                    created: new Date().getTime() / 1000,
                    updated: new Date().getTime() / 1000,
                    group: inlineCountry,
                    roles: userRoles
                }
            }

1 个答案:

答案 0 :(得分:1)

您需要使您执行的函数分别从$.get$.ajax返回承诺。然后,您需要提供SetInlineManualTrackingdone()的引用,而不是立即执行它。试试这个。

$.when(SetCountryAndLanguage(), GetUserRoles()).done(SetInlineManualTracking);

function SetCountryAndLanguage() {
    return $.get("http://ipinfo.io", function() {}, "jsonp").done(function(response) {
        inlineCountry = response.country;
    }).done(SetInlineManualLanguage);
}

function GetUserRoles() {
    return $.ajax({
        type: "POST",
        url: "../Publisher/Service.asmx/SelectUserRoles",
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    }).done(UpdateRoles);
}

请注意,由于SetInlineManualLanguageUpdateRolesSetInlineManualTracking位于请求的done处理程序中,因此它们可能会同时执行。这应该不是问题,除非其中一个依赖于另一个的结果。