D3 将承诺数据读入构造函数

D3 reading promise data into a constructor

const chart = new Chart({
  element: document.querySelector('#graph'),
  data: d3.csv('d1.csv', function(d){
                          function removeNaN(e,c){
                            if (e>0) {return e} else {return c}
                          }
                          return { date: d3.timeParse("%Y-%m-%d")(d.Date),
                                   aapl : d.AAPL, tsla : d.TSLA,
                                   aapl_sma: removeNaN(+d.SMA_AAPL,d.AAPL),
                                   tsla_sma: removeNaN(+d.SMA_TSLA,d.TSLA)
                          }
                        }).then(function(data){return data})
});

您好 - 这就是我初始化 Chart() 对象的方式。 then() returns 我想要访问的 Promise 对象。 [[PromiseResult]] 包含我要使用的数据数组。 我如何访问该数组,应该从 Chart() class 中还是从 chart 对象中完成?

这是构造函数:

class Chart{
  constructor(opts){
    this.data = opts.data;
    this.element = opts.element;

    this.draw();
  }

固定:

const chart = new Chart({element: document.querySelector('#graph')});

function init(data){
  chart.setData(data);
}

let getD1 = d3.csv('d1.csv', function(d){
                        function removeNaN(e,c){
                          if (e>0) {return e} else {return c}
                        }
                        return { date: d3.timeParse("%Y-%m-%d")(d.Date),
                                 aapl : d.AAPL, tsla : d.TSLA,
                                 aapl_sma: removeNaN(+d.SMA_AAPL,d.AAPL),
                                 tsla_sma: removeNaN(+d.SMA_TSLA,d.TSLA)
                        }
                      });

我使用的是滚动条,所以这是用滚动条实现的:

var gs = d3.graphScroll()
    .container(d3.select('#container'))
    .graph(d3.selectAll('.container #graph'))
    .eventId('uniqueId1')  // namespace for scroll and resize events
    .sections(d3.selectAll('.container #sections > div'))
    // .offset(innerWidth < 900 ? innerHeight - 30 : 200)
    .on('active', function(i){
      data2get[i].then(init); //calling .then on d3.csv() passes data to my class.
      chart.setColor(colors[i]);
    });