如何解决递归模块在需要时返回空元素
我目前有一个程序结构类似于下面的最小示例。我有对象 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 举报,一经查实,本站将立刻删除。