2015-04-12 6 views
2

У меня есть функция, где я выполняю несколько асинхронных вызовов функций. handleData Функция возвращает объект Json. Мне нужно использовать эти разные объекты Json в методе draw. Любая идея, как передать значения результата методу 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); 
} 

ответ

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

} 
+0

Когда я печатаю результаты 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); 
    } 
    }); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^