Jquery在函数完成后调用$ .when

时间:2016-07-28 12:17:27

标签: jquery ajax

我有以下代码:

isPublisher.done(function(isActive) {
    if (isActive) {
        AddRoleToUser(inlineUid, "Publisher");
    }
    $.when(SetCountryAndLanguage(), GetUserRoles()).done(SetInlineManualTracking);
});

//Add Role to inline manual table in DB.
function AddRoleToUser(userId, role) {
   return $.ajax({
        type: "POST",
        url: "../Publisher/Service.asmx/AddRoleToUser",
        data: JSON.stringify({ id: userId, role: role }),
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    });
}

我希望$.when仅在AddRoleToUser函数完成后才会发生。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

  

我希望$.when仅在AddRoleToUser函数完成后才会出现。

这就是您当前的代码所做的事情。但假设AddRoleToUser启动异步进程,并且您希望等到该进程完成,AddRoleToUser将需要接受回调或返回一个promise。

如果我们假设它返回一个承诺,那么你可以调用$.when来等待解决(如果你没有调用它,则使用伪承诺):

isPublisher.done(function(isActive) {
    var p;
    if (isActive) {
        p = AddRoleToUser(inlineUid, "Publisher");
    } else {
        p = $.Deferred().resolve().promise();
    }
    p.then(function() {
        $.when(SetCountryAndLanguage(), GetUserRoles()).done(SetInlineManualTracking);
    });
});