javascript - Javascript 对象返回失败
问题描述
更新:我已经想通了。感谢eol让我想到了承诺。虽然推荐的脚本没有让我到达那里,但我的想法却做到了。
为了让对象正确通过,我需要从对象本身开始,并重组代码以支持该目的。
var barBuildX = function(csv, domainColumnName, rangeMin, rangeMax, paddingInner, paddingOuter) {
var x = {
rMin: rangeMin,
rMax: rangeMax,
padIn: paddingInner,
padOut: paddingOuter,
domain: (function() {
var dom = [];
d3.csv(csv).then(function(data) {
data.forEach(function(d) {
dom[dom.length] = d[domainColumnName];
});
})
return dom;
})(),
};
console.log(x);
return x;
};
};
这是一个相当基本的子例程,旨在用满足 d3.js scaleBand() 函数所需的字段填充对象。该脚本的第一部分按预期工作 - 根据提供的 CSV 文件中的“domainColumnName”构建一个域名数组。然而,第二部分,我们实际构建将返回的“x”对象,没有正常运行 - 没有写入控制台或带回我试图传递给它的任何数据。这尤其令人讨厌,因为它应该只是设置属性值并返回对象以在其他地方使用......有什么想法吗?
var barBuildX = function(csv, domainColumnName, rangeMin, rangeMax, paddingInner, PaddingOuter) {
var dom = [];
d3.csv(csv).then(function(data) {
console.log(data); //this works
data.forEach(function(d) {
dom[dom.length] = d[domainColumnName];
});
console.log(dom); //this works
var x = {
domain: dom,
rMin: rangeMin,
rMax: rangeMax,
padIn: paddingInner,
padOut: paddingOuter
};
console.log(x); //this DOES NOT work
return x; //Undefined... / Type Error
});
};
变量拼写有差异,不幸的是我在复制到这个线程时犯了一个错误。在无效的原始来源中,变量拼写没有差异。
我在 Chrome 控制台中收到的错误消息是:“Uncaught TypeError: Cannot read property 'domain' of undefined”
所以,返回对象是未定义的......
解决方案
你没有从你的函数中返回承诺,这就是为什么你会得到undefined
一个返回值。做这样的事情:
var barBuildX = function(csv, domainColumnName, rangeMin, rangeMax, paddingInner, PaddingOuter) {
var dom = [];
return d3.csv(csv).then(function(data) {
console.log(data); //this works
data.forEach(function(d) {
dom[dom.length] = d[domainColumnName];
});
console.log(dom); //this works
var x = {
domain: dom,
rMin: rangeMin,
rMax: rangeMax,
padIn: paddingInner,
padOut: paddingOuter
};
console.log(x); //this DOES NOT work
return x; //Undefined... / Type Error
});
};
// how to invoke the function:
barBuildX(...).then(x => {
console.log(x);
});
推荐阅读
- android - RecyclerView.Adapter 从 URL 加载图像没有得到更新
- python - Python 3.5 - ModuleNotFoundError:没有名为“tensorflow”的模块
- rabbitmq - 如何使用 Jhipster 使用 RabbitMQ 创建一个新队列?
- ruby-on-rails - Rails 在零时将计数复数,不适用于 number_with_delimiter 方法
- protocol-buffers - 如何在 Python protobuf 中通过 Fieldmask 屏蔽地图字段?
- javascript - 恢复蓝牙设备地址
- asterisk - 宏的替代方案
- angular - 使用 RxJ 有条件地合并两个流
- python - Keras ImageDataGenerator.flow_from_dataframe 继续加载
- python - 是否可以将训练 DataLoader(和数据集)拆分为训练和验证数据集?