2个函数完成后在JQuery中执行一个函数
问题描述:
我一直在努力解决这个问题,并且无法弄清楚如何让一个函数在两个函数结果中继续执行,并在两个函数完成后立即执行。2个函数完成后在JQuery中执行一个函数
我试着这样做:
$.when(SetCountryAndLanguage(), GetUserRoles()).done(SetInlineManualTracking());
不过是去SetInlineManualTracking()
马上无需等待到2层的功能来完成他们的工作。 如何在两个函数完成后执行第三个函数,同时保持异步优势?
这是函数数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);
}
而这依赖于其他2个前面的函数第三个功能:
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
}
}
答
您需要使您执行的功能返回$.get
和的承诺。然后,您需要将SetInlineManualTracking
的参考提供给done()
,而不是立即执行。尝试这个。
$.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);
}
注意为SetInlineManualLanguage
,UpdateRoles
和SetInlineManualTracking
是在请求done
处理程序,他们可以在同一时间执行。这不应该是一个问题,除非其中一个依赖于另一个的结果。
+0
现在,它的工作原理,我明白我需要通过AJAX承诺。 –
执行函数而不是传递它们的引用,在每个函数中返回'$ .ajax'的承诺,并将'SetInlineManualTracking'的引用传递给'done()' –
@RoryMcCrossan你能告诉我你的代码是什么意思吗? ? –
我为你添加了一个答案 –