2014-12-02 3 views
1

Я хотел бы знать, если это хорошая практика, чтобы использовать событие для связи между функциями внутри ExpressJS ?. Если да, то как я могу отправить аргументы вдоль моего события emit?Как использовать события с узлом JS?

+0

Что означает «связь между функциями» означает? –

+0

Большинство реализаций javascript основаны на циклах событий (nodejs определенно основаны на циклах событий) - поэтому использование событий - определенно хорошая практика для некоторых задач - не могли бы вы быть более конкретными и представить пример кода. – Soren

+0

К сожалению, я не могу предоставить образец кода. но я могу объяснить больше своей идеи. причина, по которой я рассматриваю возможность использования событий, - это. когда пользователь подключается к моему приложению, событие должно запускаться. это событие содержит информацию о пользователе (идентификатор, имя и другие учетные данные). событие вызовет функцию, которая работает в фоновом режиме, когда пользователь перенаправляется на свою домашнюю страницу. – user2422940

ответ

4

Это зависит. Если у вас действительно асинхронная связь между функциями, тогда события должны быть рассмотрены. «Поистине» означает, что поток выполнения вызываемой функции прерывается с помощью setInterval, nextTick или syncIO (просто использование обратного вызова не обязательно асинхронно). Если это не так, вы не можете использовать события, поскольку они будут выпущены до того, как ваша функция вызова сможет установить на нее слушателя.

События требуют больше работы в вызываемой функции - вам нужно создать экземпляр EventEmitter и передать его обратно, на котором вызывающий абонент установит слушателя. Затем ваша вызываемая функция выдает события (события).

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

Если ваша асинхронно вызываемая функция может излучать события несколько раз или есть более чем несколько результатов, события хорошо подходят.

Что касается аргументов, пожалуйста, посмотрите на документе: http://nodejs.org/api/events.html

emitter.emit(event, [arg1], [arg2], [...]) 
+0

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

+0

Вам не нужно создавать новый экземпляр EventEmitter каждый раз, когда вы хотите испускать события. Вы можете обойти объект и испустить события на нем в любой части вашего кода. EventEmitter - это объект, который опосредует связь между функциями - события можно прослушивать и выходить из любого места. – YuraA

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