2016-10-26 2 views
0

Каков наилучший способ, или есть лучшая практика или обходной путь, чтобы излучать событие из вызова статического метода?ES6: Испускание событий из статических методов

Предположим, у меня есть класс ES6, который вызывает upload и загружает файлы в каталог рекурсивно в какую-либо конечную точку, и я хочу, чтобы событие было выпущено после того, как каждый отдельный файл был успешно загружен. Я знаю, что могу наследовать класс EventEmitter, но функции .on и .emit не существуют без создания экземпляра нового экземпляра класса. Есть ли способ обойти это?

+0

Как насчет одного синглтона? – MaxArt

+0

Создание нового экземпляра класса фактически аналогично созданию статического объекта. Почему нет? – tcooc

+0

@MaxArt Я подумал об этом, но метод 'upload' затем вызывает' uploadFile' по отдельности, поскольку он проходит через каталоги, поэтому один раз внутри этой функции он находится внутри другого статического метода. Синглтон работал бы в некоторых случаях, и я мог бы изменить свой код на работу, но не уверен, что есть лучший способ, не делая методы нестатичными. @tcooc Среда выполнения NodeJS дает мне ошибку 'Class.on 'не является функцией. –

ответ

3

Невозможно обойти это. Если вы хотите позвонить .emit(), вам понадобится экземпляр EventEmitter, где вы можете позвонить по телефону .emit(). И, конечно, это имеет смысл, потому что ваш другой код должен иметь что-то, чтобы позвонить .on(), чтобы зарегистрировать слушателей.

Если вам не нужен отдельный эмиттер для каждого объекта, вы можете сделать только один общий эмиттер, который вы либо храните в каком-либо другом объекте, в какой-то полезной области или в области модуля, или вы даже можете сделать одиночный излучатель статический класс. Если экземпляр эмиттера является классом static (инициализированным при запуске), то статические методы могут ссылаться на него.

+0

Начал в основном делать это из комментария @zerkms выше, но это по сути то, что я делаю сейчас, и это работает. Внутри модуля класса у меня есть экземпляр с локальным охватом eventemitter, и я создаю статические классы '.on' и' .emit', которые просто передают аргументы этому локально общему экземпляру. –

Смежные вопросы