我一整天都在努力解决这个问题,并且无法弄清楚如何在两个函数结果上执行继电器功能,并在两个函数完成后立即执行。
我试过这样做:
$.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
}
}
答案 0 :(得分:1)
您需要使您执行的函数分别从$.get
和$.ajax
返回承诺。然后,您需要提供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
处理程序中,因此它们可能会同时执行。这应该不是问题,除非其中一个依赖于另一个的结果。