如何在从REST Api获取所有数据后执行功能

时间:2017-10-11 03:07:16

标签: javascript html canvas onload canvasjs

我需要绘制一个12个月的图表。我从其余的api得到的每个月的数据。 所以这就是我做的事情

$.getJSON(link, function(data){
  // store data in a variable
}
x 12 times to get 12 variable

window.onload = function(){
  // draw chart using CanvasJS, using 12 variable above 
}

但我得到的是某些点(某个月)其余的api需要很长时间来获取数据 - >图表将以未定义的值绘制 - >图表中有几个月没有意义。

有人建议如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

看起来您正在进行12次不同的API调用,并且您希望在所有内容完成后组装画布。

您需要进行单独调用并将其存储在名为promises的数组中。

var promise1 = $.getJSON(link);
//... x 12
var promises = [promise1, promise2, promise3, //..etc];

然后您将使用$.when等待所有人解决。

$.when.apply($, promises).then(function(allMyData) {
     //make my canvas here
}, function(e) {
     console.log("My ajax failed");
});

现在,您通常可以在AJAX回调中检索的所有数据都可以allMyData访问,这是每个响应的数组。

答案 1 :(得分:0)

设置两个变量来记录数据编号的变化,并检查存储的数据是否与您需要的数据相匹配,如果是,则绘制图表。

var totalDataNumber = 12;
var storedDataNumber = 0;

$.getJSON(link, function(data){
  // store data in a variable
  storedDataNumber++;
  // check if all data are ready
  if (storedDataNumber === totalDataNumber) {
    draw();
  }
}
// x 12 times to get 12 variable

function draw() {

  // draw chart using CanvasJS, using 12 variable above 
}