我有一个函数,我可以在其中执行多个异步函数调用。 handleData
函数返回一个 Json 对象。我需要在draw
方法中使用这些不同的 Json 对象。知道如何将结果值传递给 draw 方法吗?我将不胜感激任何帮助。这是我的代码:
var publicationData = new Array();
var researchers = [];
var year = [];
var title = [];
var pub = [];
var dataJson = [];
callServerAsync();
function callServerAsync(){
$.get('Year2014.html').then(function(responseData) {
var result1 = handleData(responseData, dataJson);
});
$.get('tauchi_publications.html').then(function(responseData) {
var result2 = handleData(responseData, dataJson);
});
//TO-DO
//draw(result1, result2);
}
function handleData(responseData, dataJson){
var htmlObject = document.createElement('div');
htmlObject.innerHTML = responseData;
pub = htmlObject.getElementsByClassName("julkaisu");
getPublicationData(pub);
getResearchersYearTitle(publicationData);
dataJson = createJson(researchers,year,title);
return dataJson;
}
function draw(result1,result2){
result1.concat(result2);
}
使用承诺! jQuery的$.get
返回其返回值的承诺。 jQuery包含一个$.when
方法,用于等待多个延迟。
function callServerAsync(){
var p1 = $.get('Year2014.html').then(function(responseData) {
return handleData(responseData, dataJson);
});
var p2 = $.get('tauchi_publications.html').then(function(responseData) {
return handleData(responseData, dataJson);
});
// the `return` here is just for good measure
return $.when(p1, p2).then(function(result1, result2){
// all your data available, can use it here.
// It's in the function arguments
draw(result1, result2);
});
}
我认为你可以做这样的事情。当调用结束时,它会检查其他调用/结果是否存在,如果不存在,则它什么也不做。这样,最后一个函数将实际绘制它。
function callServerAsync(){
var result1, result2;
$.get('Year2014.html').then(function(responseData) {
result1 = handleData(responseData, dataJson);
if(result1 && result2) {
draw(result1, result2);
}
});
$.get('tauchi_publications.html').then(function(responseData) {
result2 = handleData(responseData, dataJson);
if(result1 && result2) {
draw(result1, result2);
}
});
}