16

在查看sax nodejs 模块时,我看到了多个emit函数调用,但我找不到任何关于它的信息。

它是一些用于发射事件的 V8 原生工具吗?那么为什么sax-js不对流使用 EventEmitter 呢?

4

3 回答 3

29

在 node.js 中,事件可以简单地描述为带有相应回调的字符串。一个事件可以被“发出”(或者换句话说,相应的回调被调用)多次,或者你可以选择只在它第一次发出时监听。

on 或 addListener 方法(基本上是订阅方法)允许您选择要监视的事件和要调用的回调。另一方面,emit 方法(发布方法)允许您“发出”一个事件,这会导致注册到该事件的所有回调“触发”(被调用)。

参考:https ://docs.nodejitsu.com/articles/getting-started/control-flow/what-are-event-emitters/ (这是一个过时的链接,不再起作用)

于 2015-08-27T10:02:31.000 回答
11

简而言之:Emit 的工作是触发命名事件,这反过来会导致调用称为侦听器的函数。

详细:Node.js 核心 API 是围绕惯用的异步事件驱动架构构建的,其中某些类型的对象(称为“发射器”)周期性地发出命名事件,这些事件会导致函数对象(“侦听器”)被调用。

所有发出事件的对象都是 EventEmitter 类的实例。这些对象公开了一个 eventEmitter.on() 函数,该函数允许将一个或多个函数附加到对象发出的命名事件。

当 EventEmitter 对象发出一个事件时,所有附加到该特定事件的函数都会被同步调用。被调用的侦听器返回的任何值都将被忽略并被丢弃。

在这里阅读更多

于 2018-04-04T05:29:36.903 回答
5

请查看同一文件的第 624 行。

function emit (parser, event, data) {

  parser[event] && parser[event](data)

}
于 2015-08-27T10:02:33.230 回答