Javascript对象返回失败

Javascript对象返回失败,javascript,object,properties,return,closures,Javascript,Object,Properties,Return,Closures,更新:我已经弄明白了。感谢您收看《下线》,让我思考这个承诺。虽然推荐的剧本没能让我达到目的,但我的想法确实做到了 为了让对象正确地通过,我需要从对象本身开始,重新构造代码以支持这一目的 var barBuildX = function(csv, domainColumnName, rangeMin, rangeMax, paddingInner, paddingOuter) { var x = { rMin: rangeMin, rMax: rangeMax, padI

更新:我已经弄明白了。感谢您收看《下线》,让我思考这个承诺。虽然推荐的剧本没能让我达到目的,但我的想法确实做到了

为了让对象正确地通过,我需要从对象本身开始,重新构造代码以支持这一目的

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控制台中收到的错误消息是:“UncaughtTypeError:无法读取未定义的属性'domain'”


因此,返回对象是未定义的…

您没有从函数中返回承诺,这就是为什么您将得到
未定义的
作为返回值。这样做:

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

paddingOuter
的拼写与参数不同这看起来像是遇到了一个问题,只是这些值应该在您说不存在的地方定义。“这不起作用”和“未定义的…/类型错误”不是明确的问题陈述。您应该准确地引用错误消息,并说明从何处读取这些消息。“paddingOuter的拼写与参数不同”-这意味着您在说有错误之前,应该先获得两行参考错误。由于我正在脱机系统上工作,因此我在此处手动重新输入了代码。paddingOuter的拼写在原始源代码中是相同的…您需要提供一个实际演示您的问题的。理想情况下,作为一个整体。问题下面有一个编辑链接。