2015-04-12 88 views
2

我有一个功能,我做多个异步函数调用。 handleData函数返回一个Json对象。我需要在draw方法中使用这些不同的Json对象。任何想法如何将结果值传递给绘制方法?我将不胜感激任何帮助。这里是我的代码:如何从多个异步函数调用返回响应?

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); 
} 

回答

3

使用承诺! 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); 
    }); 

} 
+0

当我在draw方法中打印result1和result2内容时,我看到它们具有相同的内容。 Json对象被连接而不使用concat方法。你为什么认为这是这样的? – supaplex

+0

我可以制作一个独立的小提示,告诉你上面的代码可以像广告中那样工作,如果这可以向你保证的话。它看起来像你的'handleData'函数是错误的 - 为什么它需要dataJson参数?总的来说,我不明白你在那里做什么。 –

-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); 
    } 
    }); 
} 
相关问题