Esto parece ser un error de promesa, pero cuando hago console.log en mi clase Chart , funciona bien. Aquí está la parte relevante de la clase Chart :
createScales(){ console.log(this.data); //this works fine, data is type 'object'. this.keynames = d3.scaleOrdinal(); this.keynames.domain(Object.keys(this.data[0]).filter(function(key){ console.log(key); //this works fine too, column keys are returned. return key !== 'date'; })); this.keymap = this.keynames.domain().map(function(keyname) { return{ name: keyname, values: this.data.map(function(d){ //here is the error return { date: d.date, key: +d[keyname] } }) } }); Soy nuevo en javascript y alguna terminología aún no me resulta familiar. ¿Por qué los datos no están definidos dentro this.keymap pero funcionan bien cuando se registran fuera?
Este es el rastreo completo:
chart.js:46 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'data') at chart.js:46 at Array.map (<anonymous>) at Chart.createScales (chart.js:43) at Chart.draw (chart.js:30) at Chart.setData (chart.js:116) at init (plot.js:15) (anonymous) @ chart.js:46 createScales @ chart.js:43 draw @ chart.js:30 setData @ chart.js:116 init @ plot.js:15 Promise.then (async) (anonymous) @ plot.js:12Así es como paso mis datos a chart.js:
let getData = d3.csv('d1.csv', function(d){ //data returning stuff here, works fine } }).then(init); function init(data){ chart.setData(data); //updates constructor with new data } Como dije anteriormente, mis datos funcionan bien cuando se leen desde la clase Chart . ¿Alguien sabe lo que está pasando?