【问题标题】:Papaparse, ReferenceError: variable is not definedPapaparse,ReferenceError:未定义变量
【发布时间】:2020-04-09 13:10:47
【问题描述】:

我正在使用 PapaParse 导入一些数据的 Geocharts 地图。我遇到的问题是 temp = CovidData.data.find(element[1] === countries[c]); 线上的 ReferenceError。

我正在使用 PapaParse 库来解析我从 GitHub 上抓取的 csv 文件。

      google.charts.load('current', {
        'packages':['geochart'],
      });
      google.charts.setOnLoadCallback(drawRegionsMap);

    function drawRegionsMap() {
    Papa.parse('https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv',{    download: true,
    complete: function(results) {var CovidData=results;}});

    countries = ["France","Germany", "United Kingdom", "US", "Italy"];
    var mapData = [{label: 'Country', type: 'string'}, 'Density',{label: 'Infected', type: 'number'}];

    for(c in countries) {
      var temp = CovidData.data.find(element => element[0] === "" && element[1] === countries[c]);
      mapData.push([countries[c],1,temp[temp.length-1]);
    }

        var data = google.visualization.arrayToDataTable(mapData);
        var options = {
                    colorAxis: {colors: ['green','blue', 'red','black'], maxValue: 1},
                    datalessRegionColor: 'grey',
                    defaultColor: '#f5f5f5',
                    callback: drawRegionsMap,
          };

        var chart = new google.visualization.GeoChart(document.getElementById('regions_div'));
        chart.draw(data);
      }

【问题讨论】:

  • 如果temp之前没有声明过,你需要var temp =... (或者let或者const
  • @RobinZigmond 错误似乎来自 Papa.parse(...)。即使在那一行之后,CovidData 似乎也未定义。
  • 好吧,我只是偏离了你所引用的路线。 CovidData 可能还没有被声明 - 你没有共享足够的代码来知道,或者足够的错误消息。
  • 如果您的意思是CovidData(您并没有真正在问题本身中说,只是在 cmets 中),它是某些内部回调函数中的局部变量。这意味着它在其他地方无法访问。
  • complete 回调几乎无法对在请求完成之前在其他地方运行的代码做任何事情。

标签: javascript google-visualization google-geocoder papaparse


【解决方案1】:

我能够使用 JS Promise 解决这个问题,因此它会等待所有数据被获取并且异步函数在继续之前返回。它看起来像这样:

    google.charts.load('current', {
        'packages':['geochart'],
    });
    urls = ['https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv']
    Promise.all(
      urls
      .map(
        url=>
          new Promise(
            (resolve,reject)=>

        Papa.parse(url,
        {
                  download: true,
                  complete:resolve,//resolve the promise when complete
                  error:reject//reject the promise if there is an error
                }
          )
      )
    ))
    .then(
      function (results) {
        var mapData = [[{label: 'Country', type: 'string'}, 'Density',{label: 'Infected', type: 'number'},{type: 'string', role: 'tooltip', 'p': {'html': true}}]];
    // ...add data
          function drawRegionsMap() {
            CovidInfected= results[0];
              }

            }

        var data = google.visualization.arrayToDataTable(mapData);
         // var options = ...;
        var chart = new google.visualization.GeoChart(document.getElementById('regions_div'));
        chart.draw(data, {
                    tooltip: { isHtml: true, trigger: 'selection'}
                  });
        }
      google.charts.setOnLoadCallback(drawRegionsMap);
)
    .catch(
      err=>console.warn("Something went wrong:",err)
    )

【讨论】:

    猜你喜欢
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2021-02-08
    相关资源
    最近更新 更多