什么是 `emit` javascript 函数?

What is `emit` javascript function?

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

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

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

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

参考:https://docs.nodejitsu.com/articles/getting-started/control-flow/what-are-event-emitters/ (这是一个过时的 link,不再有效)

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

function emit (parser, event, data) {

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

}

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

详细:Node.js核心API是围绕惯用的异步event-driven架构构建的,其中某些类型的对象(称为“emitters") 定期发出命名事件,导致函数对象(“侦听器”)被调用。

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

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

阅读更多here