我试图不必使用名为“data”的全局变量
在我的 js 文件中,我现在有这个函数:
var Module_BarDataDaily = (function() {
var data;
d3.csv("myData.csv", function(rows) {
data = rows;
});
return {
dataX: data
}
})();
当时(可能是错误的)我的印象是我可以通过 Module_BarDataDaily.dataX
访问这些数据 - 因此在后续函数中我执行以下操作:
function TOPbarChart(
grp, meas, colorChosen) {
TOPbarData = Module_BarDataDaily.dataX.map(function(d) { //line 900
return { ...
然后控制台在第 900 行给出了一个异常(exception):
TypeError: Module_BarDataDaily.dataX is undefined
我做错了什么以及如何解决它?
最佳答案
这里的问题是 d3.csv
是异步的,因此数据填充的时间与访问的时间不同。
如果您想运行一次d3.csv
,获取数据并将其保存在其他地方,您可以尝试类似 this 的操作。或this或this
一般来说:
// define your module here
var Module_BarDataDaily = function(data) {
this.dataX = data; //this.dataX will store the data
this.process = function(){// do whatever you need afterwards
console.log(this.dataX);
}
};
var process = function(myModule){
// or use another function to do what you need etc
console.log(myModule.dataX);
}
// load your csv once and save the data
d3.csv("path/to/your.csv", function(error, data) {
// after some proper error handling...
var myModule = new Module_BarDataDaily(data);
// so then you can do anything after that and
// your myModule will have data without calling d3.csv again
myModule.process();
//or
process(myModule);
});
希望这有帮助! 祝你好运!
关于javascript - 尝试使用模块模式来安全地获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42627268/