是什么原因导致“未捕获的RangeError:超出最大调用堆栈大小”以及如何删除它?

时间:2019-03-28 15:32:39

标签: crossfilter

我正在使用ajax中的数据创建交叉过滤器维度。创建尺寸变量的正确方法是什么?

    var url = "http://" + window.location.host + "/twitter-data"; 

    $.ajax({
        url: url,
        async: false,
        success: function(data) {
                makeGraphs(data);
        }

    });

    function makeGraphs(records){
        var dateFormat = d3.time.format("%Y-%m-%dT%H:%M:%S+%H:%M");

        var data = records.map(obj => {

            var res = dateFormat.parse(obj._source.published)
            return res;
        });

        console.log(data[0]);

        //Crossfilter
        var ndx = crossfilter(data);
        var all = ndx.groupAll


        //Dimensions
        var hashtagDim = ndx.dimension( function (d) {return d.hashtags; }, true);

'

控制台上的错误如下:

  

未捕获的RangeError:超出了最大调用堆栈大小

     
    

在quicksort(crossfilter.js:172)

         
      

排序(crossfilter.js:169)

    
  

它会像这样继续。

代码段的最后一行会产生错误。我已经看到解决方案说这是一个递归函数调用,但是我不确定为避免此错误需要更改代码。

1 个答案:

答案 0 :(得分:2)

您确定数据元素上有一个“ hashtag”属性吗?

很常见,当我使用交叉过滤器遇到相同的错误时,这是​​因为我一直试图使用不存在的属性注册维度(即,值函数返回undefined)。由于属性区分大小写,因此对属性使用错误的大小写也会导致返回undefined返回值。

通常,维度(或组)值函数可能永远不会返回NaNundefinednullNatural ordering of dimension and group values

可能的根本原因是,如果您在AJAX请求完成之前就启动了交叉过滤器。但这只是猜测,因为我对您的代码不够了解。