我有以下代码:
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
函数完成后才会发生。我怎样才能做到这一点?
答案 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);
});
});