问题描述
我目前有一个程序结构类似于下面的最小示例。我有对象 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