如何处理需求循环?

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?。

【讨论】:

以上是关于如何处理需求循环?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理循环中的每个输出行?

Arduino如何处理中断?

前端知识体系:JavaScript基础-作用域和闭包-如何处理循环的异步操作

一般来说,Node.js 如何处理 10,000 个并发请求?

browserify 如何处理循环依赖?

如何处理:循环调用'Thread.sleep()',可能是忙等待