• Node.js Video Tutorials

NodeJS - emitter.on() 方法


emitter.on() 方法用于将作为监听器函数传递的函数添加到名为 eventName 的事件的监听器数组的末尾。无法检查监听器是否已添加到监听器数组。

如果多次调用 emitter.on() 方法并传递 eventName 和 listener 的相同组合,则监听器函数将添加到 listeners 数组中,并将根据添加的次数被调用。

此方法属于Eventemitter 类,它是 node:events 模块的内置类。

语法

以下是 NodeJs emitter.on() 方法的语法:

eventEmitter.on(eventName, listener)

参数

此方法接受下面列出的两个参数:

  • EventName: 它是唯一标识事件的字符串或符号。
  • Listener: 它是当发出指定事件时将执行的回调函数。

返回值

它返回特定事件的事件监听器。当发出指定的事件时,将执行提供的回调函数。

示例 1

以下是 NodeJs emitter.on() 方法的基本示例。

首先,我们导入了node:events 模块。我们创建了一个包含消息的函数 func1。然后我们使用 eventName 作为第一个参数调用了emitter.on() 方法,并将 (func1) 传递给了方法的 listener 参数。因此,该函数被添加到监听器数组中。因此,当我们编译并运行程序时,它将打印监听器函数中的消息。

const EventEmitter = require('node:events');

const myEmitter = new EventEmitter();

function func1() {
   console.log('Welcome peeps!');
}

myEmitter.on('eventOne', func1);

myEmitter.emit('eventOne');

输出

上述程序产生以下输出:

Welcome peeps!

示例 2

在这个例子中,我们创建了两个函数并将它们传递给 listener 函数参数。因此,myEmitter.on() 方法将监听器函数添加到名为 eventOne 的事件的监听器数组的末尾。因此,当我们编译并运行程序时,它将首先打印 func1,然后打印 func2。

const EventEmitter = require('node:events');

const myEmitter = new EventEmitter();

function func1() {
   console.log('Welcome peeps!');
}

function func2() {
   console.log('Hope you have a good day.');
}

myEmitter.on('eventOne', func1);
myEmitter.on('eventOne', func2);

myEmitter.emit('eventOne');

输出

上述程序产生以下输出:

Welcome peeps!
Hope you have a good day.

示例 3

以下是另一个示例,这里我们将相同的 eventName 和 listener 组合传递给方法。这将导致监听器函数被添加到监听器数组中并被多次调用。因此,当我们编译并运行程序时,我们可以看到 func2 被添加了两次,并在输出中打印了两次。

const EventEmitter = require('node:events');

const myEmitter = new EventEmitter();

function func1() {
   console.log('Welcome peeps!');
}

function func2() {
   console.log('Hope you have a good day.');
}

myEmitter.on('eventOne', func1);
myEmitter.on('eventOne', func2);
myEmitter.on('eventOne', func2);

myEmitter.emit('eventOne');

输出

上述程序产生以下输出:

Welcome peeps!
Hope you have a good day.
Hope you have a good day.

示例 4

在这个例子中,我们使用了 emitter.prependListener() 方法和我们传递给之前的 myEmitter.on() 方法相同的 eventName。然后我们将函数 fucn3 传递给 emitter.prependListener() 方法。因此,这将把函数添加到监听器数组的开头。因此,当我们编译并运行程序时,传递给 emitter.prependListener() 方法的函数将首先被打印。

const EventEmitter = require('node:events');

const myEmitter = new EventEmitter();

function func1() {
   console.log('Welcome peeps!');
}

function func2() {
   console.log('Hope you have a good day.');
}

function func3() {
  console.log('This will be added first');
}

myEmitter.on('eventOne', func1);
myEmitter.on('eventOne', func2);
myEmitter.prependListener('eventOne', func3);

myEmitter.emit('eventOne');

输出

上述程序产生以下输出:

This will be added first
Welcome peeps!
Hope you have a good day.
nodejs_events.htm
广告
© . All rights reserved.