2015-04-12 90 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); 
    } 
    }); 
} 
相關問題