微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

递归模块在需要时返回空元素

如何解决递归模块在需要时返回空元素

我目前有一个程序结构类似于下面的最小示例。我有对象 foo方法 addColor,它需要模块 bar

bar 需要 baz 并传递参数 color

baz 需要 foo 来编辑来自 foo属性addColor 必须为 foo.colors 添加颜色)

但是在 baz 内部:foo 返回 {} 并发生以下错误

foo.colors.push(color);
           ^

TypeError: Cannot read property 'push' of undefined

我认为这是模块递归的一个问题,如果不重构我的程序,就无法找到解决此问题的方法

index.js

const foo = require('./foo');

console.log(foo);
// { colors: [ 'red','green' ],addColor: [Function (anonymous)] }

foo.addColor('blue');

foo.js

module.exports = {
  colors: ['red','green'],addColor: require('./bar')
}

bar.js

const baz = require('./baz');
module.exports = color => {
  baz(color);
};

baz.js

const foo = require('./foo');
module.exports = color => {
  console.log(foo); // {}

  foo.colors.push(color);
  /*
    foo.colors.push(color);
               ^

    TypeError: Cannot read property 'push' of undefined
  */
};

解决方法

您的依赖关系图中有一个循环。这很可能会导致问题。有关如何解决问题的一些想法,请参阅此问题:How to deal with cyclic dependencies in Node.js

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。