如何处理需求循环?
Posted
技术标签:
【中文标题】如何处理需求循环?【英文标题】:How to deal with require-loops? 【发布时间】:2016-10-24 02:30:48 【问题描述】:我有两个这样定义的模型:
user.js
var sequelize = require('../database.js').sequelize,
Sequelize = require('../database.js').Sequelize,
userAttributes = require('./userAttributes.js');
User = sequelize.define('user', ,
classMethods:
createRider: function(params)
var reqs = ['name', 'phone', 'fbprofile'],
values = [],
newUser;
reqs.forEach((req) =>
var value = params[req];
);
//Here I want to use the userAttributes-object.
return newUser;
);
module.exports = User;
userAttributes.js
var sequelize = require('../database.js').sequelize,
Sequelize = require('../database.js').Sequelize,
User = require('./user.js');
UserAttribute = sequelize.define('userAttributes',
name: Sequelize.STRING,
value: Sequelize.STRING,
);
UserAttribute.belongsTo(User);
module.exports = UserAttribute;
在用户 User.addRider 中我想向 UserAttributes 添加一些记录,所以我想将该模型包含在用户中。在 userAttributes 中,我需要要求用户将其定义为 belongsTo。这似乎不起作用。我该如何解决这个问题?
【问题讨论】:
问题源于将需求放在文件顶部(如果您坚持具有循环文件依赖项)。在 UserAttribute 分配发生后放置 User 要求,在 User 被分配后放置 UserAttribute 要求 - 尽管不是很干净,但这应该可以工作。 在没有循环依赖的情况下应该怎么做? 说“坚持”可能有点不公平 - Sequelize 似乎确实想要这样的事情。为什么不把 UserAttribute 定义和 User 放在同一个文件中,就在 User 定义的下面呢?这应该可以工作,因为 UserAttributes 将在 createRider 函数被调用时定义。 【参考方案1】:您可以使用单个文件来导入所有模型并在导入所有模型后关联它们。这样,您就不需要任何循环引用。
这个问题中第二受欢迎的答案描述了如何做到这一点:How to organize a node app that uses sequelize?。
【讨论】:
以上是关于如何处理需求循环?的主要内容,如果未能解决你的问题,请参考以下文章
前端知识体系:JavaScript基础-作用域和闭包-如何处理循环的异步操作