我有一个函数可以执行多个异步函数调用。 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);
}
答案 0 :(得分:3)
使用承诺! jQuery' s $.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);
});
}
答案 1 :(得分:-1)
我认为你可以做这样的事情。当呼叫结束时,它会检查其他呼叫/结果是否存在,如果不存在,则不执行任何操作。这样最后一个函数实际上会绘制它。
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);
}
});
}