什么是更好的方法来处理EventEmitter和循环需要?

我有这样的用户服务:

'use strict'; let events = require('services/events'); module.exports = { create: function (data) { doCreate(data).then(user => { events.emit('user.create'); }); }, addBonus: function (transaction) { doSomething; } } 

我有events模块:

 'use strict'; let EventEmitter = require('events').EventEmitter; let pubsub = new EventEmitter(); let userService = require('services/user'); pubsub.on('user.create', function(user) { console.log('EVENT: user.create'); doSomething(); } pubsub.on('payment.success', function(transaction) { userService.addBonus(transaction); // check if it was first transaction then add bonus to user } module.exports = pubsub; 

在这种情况下,代码有循环需求,代码不起作用。

我认为events模块使用在这个模块中发出事件的服务是很常见的。 什么是更好的方法来devise这种情况? 我有下一个想法:

  • 创build一些按事件types分类的事件模块
  • user服务中使用构造函数

也许把代码分解成多个文件:

 // services/user/create let events = require('services/events'); module.exports = { create: function (data) { doCreate(data).then(user => { events.emit('user.create'); }); }, } // services/user/addBonus module.exports = { addBonus: function (transaction) { doSomething; } } // services/events let EventEmitter = require('events').EventEmitter; let pubsub = new EventEmitter(); let userService = require('services/user/addBonus'); pubsub.on('user.create', function(user) { console.log('EVENT: user.create'); doSomething(); } pubsub.on('payment.success', function(transaction) { userService.addBonus(transaction); // check if it was first transaction then add bonus to user }