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



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

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

我认为你可以做这样的事情。当调用结束时,它会检查其他调用/结果是否存在,如果不存在,则它什么也不做。这样,最后一个函数将实际绘制它。

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

相关内容

  • 没有找到相关文章

最新更新