У меня есть пользовательское обслуживание:
'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
использует службу, которая испускает событие в этом модуле. Что лучше подходит для проектирования этого случая? У меня есть следующие идеи:
events
классифицированных по типу событий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
}