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]);
});
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]);
});