如何从多个异步函数调用返回响应?

时间:2015-04-12 20:15:46

标签: javascript json function asynchronous jquery-callback

我有一个函数可以执行多个异步函数调用。 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);
}

2 个答案:

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