为了账号安全,请及时绑定邮箱和手机立即绑定

如何处理Node.js中的循环依赖关系

如何处理Node.js中的循环依赖关系

达令说 2019-07-10 15:29:59
如何处理Node.js中的循环依赖关系我最近一直在使用NodeJS,并且仍然在处理模块系统,所以如果这是一个明显的问题,请原谅。我希望代码大致如下所示:a.js(主文件与节点一起运行)var ClassB = require("./b");var ClassA = function() {     this.thing = new ClassB();     this.property = 5;}var a = new ClassA();module.exports = a;b.jsvar a = require("./a");var ClassB = function() {}ClassB.prototype.doSomethingLater() {     util.log(a.property);}module.exports = ClassB;我的问题似乎是我无法从ClassB的实例中访问ClassA的实例。是否有一种正确/更好的方式来构造模块以实现我想要的?是否有更好的方法在模块之间共享变量?
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

虽然node.js允许循环require依赖关系,正如您已经发现的,它可以是很乱你最好把你的代码重组成不需要它。也许可以创建第三个类,使用其他两个类来完成所需的任务。


查看完整回答
反对 回复 2019-07-10
?
慕森卡

TA贡献1806条经验 获得超8个赞

尝试将属性设置为module.exports而不是完全取代它。例如,module.exports.instance = new ClassA()在……里面a.jsmodule.exports.ClassB = ClassB在……里面b.js..创建循环模块依赖项时,所需模块将获得对不完整模块的引用。module.exports从所需的模块中,您可以在后面添加其他属性,但当您设置整个module.exports,您实际上创建了一个需要模块无法访问的新对象。


查看完整回答
反对 回复 2019-07-10
?
MYYA

TA贡献1868条经验 获得超4个赞

我知道我在这里发现了一个旧的答案.。这里的问题是定义了module.export你需要B级。循环依赖(JohnnyHK的链接显示)循环依赖在Node中非常有用,它们是同步定义的。如果使用得当,它们实际上解决了许多常见的节点问题(比如访问表达式.js)app其他文件)


只需确保定义了所需的导出即可。以前您需要一个具有循环依赖关系的文件。

这将破坏:

var ClassA = function(){};var ClassB = require('classB'); //will require ClassA, which has no exports yetmodule.exports = ClassA;

这将起作用:

var ClassA = module.exports = function(){};var ClassB = require('classB');

我一直使用这个模式来访问press.jsapp在其他档案中:

var express = require('express');var app = module.exports = express();// load in other dependencies, which can now require this file and use app


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 845 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信