Какой лучший подход для работы с EventEmitter и циклическими требованиями?

1

У меня есть пользовательское обслуживание:

'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 сервисе
  • 0
    Это был приемлемый ответ?
Теги:
express

1 ответ

2

Возможно, разбить код на несколько файлов:

// 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
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню