Как вызвать функцию, когда мой массив заполнен - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть функция, которая строит диаграмму с диаграммой. js, но иногда она запускается, когда предыдущая функция, где я получаю данные, еще не завершена, поэтому диаграмма разбивается, как я просто вызываю свою функцию когда у меня есть все данные, которые мне нужны ?? Я хочу использовать что-то другое, чем setTimeout, потому что я уже использую это, и иногда это все равно не получается, я не хочу просто увеличивать число тайм-аута

    if (regionData !== undefined) {
    that.hasData = true;
    Object.entries(regionData).forEach(e => {
      let obj = {};
      let value = 0;
      let regionD = all_regions.map(function (e) { return e.id; }).indexOf(e[0]);
      obj["regionDescription"] = all_regions[regionD].data.d;
      obj["region"] = e[0];
      if (e[1] !== undefined && e[1]["month"] !== undefined) {
        value = e[1]["month"][e[1]["month"].length - 1];
      }
      obj["regio"] = value;
      regionS.push(obj);
    });
    that.buildChart(regionS, lastMonth);
  }

Вот где я вызываю свою функцию диаграммы

1 Ответ

1 голос
/ 30 апреля 2020

Я не вижу остальной части вашего кода, но на основании вашего описания есть одно простое логическое решение.

Проблема в том, что функция buildChart выполняется перед функцией getChartData. Решение. Вызовите функцию buildChart после функции getChartData. Пример псевдокода,

const getChartData = () => {
    return new Promise((resolve) => {
        Run your HTTP request and retrieve your data
        resolve(chart data ready to be used)
    });
}
const buildChart = () => {
    // do your chart building here
}
//then you run the functions in sequence.
getChartData().then(buildChart);
...