Protected
_isProtected
clientOptional
dataProtected
transportStatic
Readonly
captureStatic
captureStatic
defaultStatic
Readonly
error此符号应用于为仅监控 'error'
事件安装监听器。使用此符号安装的监听器在调用常规 'error'
监听器之前被调用。
使用此符号安装监听器不会改变 'error'
事件发出后的行为,因此如果未安装常规 'error'
监听器,进程仍然会崩溃。
选项卡页编号
当前标签页是否有效
获取标签页的当前窗口
同步调用为名为 eventName
的事件注册的每个监听器,按照它们注册的顺序,并将提供的参数传递给每个监听器。
如果事件有监听器,则返回 true
,否则返回 false
。
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
// First listener
myEmitter.on('event', function firstListener() {
console.log('Helloooo! first listener');
});
// Second listener
myEmitter.on('event', function secondListener(arg1, arg2) {
console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
});
// Third listener
myEmitter.on('event', function thirdListener(...args) {
const parameters = args.join(', ');
console.log(`event with parameters ${parameters} in third listener`);
});
console.log(myEmitter.listeners('event'));
myEmitter.emit('event', 1, 2, 3, 4, 5);
// Prints:
// [
// [Function: firstListener],
// [Function: secondListener],
// [Function: thirdListener]
// ]
// Helloooo! first listener
// event with parameters 1, 2 in second listener
// event with parameters 1, 2, 3, 4, 5 in third listener
Rest
...args: any[]返回一个数组,其中列出了发射器已为其注册监听器的事件。数组中的值是字符串或 Symbol
。
const EventEmitter = require('events');
const myEE = new EventEmitter();
myEE.on('foo', () => {});
myEE.on('bar', () => {});
const sym = Symbol('symbol');
myEE.on(sym, () => {});
console.log(myEE.eventNames());
// Prints: [ 'foo', 'bar', Symbol(symbol) ]
返回 EventEmitter
的当前最大监听器值,该值由 emitter.setMaxListeners(n)
设置或默认为 defaultMaxListeners。
将 listener
函数添加到名为 eventName
的事件的监听器数组的末尾。不进行任何检查以查看 listener
是否已被添加。多次调用传递相同的 eventName
和 listener
组合将导致 listener
被添加和调用多次。
server.on('connection', (stream) => {
console.log('someone connected!');
});
返回对 EventEmitter
的引用,以便可以将调用链接起来。
默认情况下,事件监听器按添加顺序调用。emitter.prependListener()
方法可用作替代方案,将事件监听器添加到监听器数组的开头。
const myEE = new EventEmitter();
myEE.on('foo', () => console.log('a'));
myEE.prependListener('foo', () => console.log('b'));
myEE.emit('foo');
// Prints:
// b
// a
事件的名称。
回调函数
Rest
...args: any[]为名为 eventName
的事件添加**一次性**listener
函数。下次触发 eventName
时,此监听器将被删除,然后调用。
server.once('connection', (stream) => {
console.log('Ah, we have our first user!');
});
返回对 EventEmitter
的引用,以便可以将调用链接起来。
默认情况下,事件监听器按添加顺序调用。emitter.prependOnceListener()
方法可用作替代方案,将事件监听器添加到监听器数组的开头。
const myEE = new EventEmitter();
myEE.once('foo', () => console.log('a'));
myEE.prependOnceListener('foo', () => console.log('b'));
myEE.emit('foo');
// Prints:
// b
// a
事件的名称。
回调函数
Rest
...args: any[]将 listener
函数添加到名为 eventName
的事件的监听器数组的开头。不进行任何检查以查看 listener
是否已被添加。多次调用传递相同的 eventName
和 listener
组合将导致 listener
被添加和调用多次。
server.prependListener('connection', (stream) => {
console.log('someone connected!');
});
返回对 EventEmitter
的引用,以便可以将调用链接起来。
事件的名称。
回调函数
Rest
...args: any[]将名为 eventName
的事件的**一次性**listener
函数添加到监听器数组的_开头_。下次触发 eventName
时,此监听器将被删除,然后调用。
server.prependOnceListener('connection', (stream) => {
console.log('Ah, we have our first user!');
});
返回对 EventEmitter
的引用,以便可以将调用链接起来。
事件的名称。
回调函数
Rest
...args: any[]返回名为 eventName
的事件的监听器数组的副本,包括任何包装器(例如由 .once()
创建的包装器)。
const emitter = new EventEmitter();
emitter.once('log', () => console.log('log once'));
// Returns a new Array with a function `onceWrapper` which has a property
// `listener` which contains the original listener bound above
const listeners = emitter.rawListeners('log');
const logFnWrapper = listeners[0];
// Logs "log once" to the console and does not unbind the `once` event
logFnWrapper.listener();
// Logs "log once" to the console and removes the listener
logFnWrapper();
emitter.on('log', () => console.log('log persistently'));
// Will return a new Array with a single function bound by `.on()` above
const newListeners = emitter.rawListeners('log');
// Logs "log persistently" twice
newListeners[0]();
emitter.emit('log');
从名为 eventName
的事件的监听器数组中删除指定的 listener
。
const callback = (stream) => {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
removeListener()
最多会从监听器数组中删除一个监听器实例。如果为指定的 eventName
将单个监听器多次添加到监听器数组中,则必须多次调用 removeListener()
以删除每个实例。
事件发出后,在发出时附加到它的所有监听器将按顺序调用。这意味着任何在发出后和最后一个监听器完成执行之前的 removeListener()
或 removeAllListeners()
调用不会从正在进行的 emit()
中删除它们。后续事件的行为将如预期。
const myEmitter = new MyEmitter();
const callbackA = () => {
console.log('A');
myEmitter.removeListener('event', callbackB);
};
const callbackB = () => {
console.log('B');
};
myEmitter.on('event', callbackA);
myEmitter.on('event', callbackB);
// callbackA removes listener callbackB but it will still be called.
// Internal listener array at time of emit [callbackA, callbackB]
myEmitter.emit('event');
// Prints:
// A
// B
// callbackB is now removed.
// Internal listener array [callbackA]
myEmitter.emit('event');
// Prints:
// A
因为监听器是使用内部数组管理的,所以调用此方法将更改在删除的监听器_之后_注册的任何监听器的位置索引。这不会影响监听器调用的顺序,但意味着由 emitter.listeners()
方法返回的监听器数组的任何副本都需要重新创建。
当单个函数被多次添加为单个事件的处理程序时(如以下示例所示),removeListener()
将删除最近添加的实例。在示例中,once('ping')
监听器被删除了
const ee = new EventEmitter();
function pong() {
console.log('pong');
}
ee.on('ping', pong);
ee.once('ping', pong);
ee.removeListener('ping', pong);
ee.emit('ping');
ee.emit('ping');
返回对 EventEmitter
的引用,以便可以将调用链接起来。
Rest
...args: any[]静态
获取返回名为 eventName
的事件的监听器数组的副本。
对于 EventEmitter
,这与在发射器上调用 .listeners
的行为完全相同。
对于 EventTarget
,这是获取事件目标事件监听器的唯一方法。这对于调试和诊断目的很有用。
const { getEventListeners, EventEmitter } = require('events');
{
const ee = new EventEmitter();
const listener = () => console.log('Events are fun');
ee.on('foo', listener);
getEventListeners(ee, 'foo'); // [listener]
}
{
const et = new EventTarget();
const listener = () => console.log('Events are fun');
et.addEventListener('foo', listener);
getEventListeners(et, 'foo'); // [listener]
}
静态
监听器一个类方法,返回在给定 emitter
上注册的给定 eventName
的监听器数量。
const { EventEmitter, listenerCount } = require('events');
const myEmitter = new EventEmitter();
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
console.log(listenerCount(myEmitter, 'event'));
// Prints: 2
要查询的发射器
事件名称
静态
onconst { on, EventEmitter } = require('events');
(async () => {
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
})();
返回一个 AsyncIterator
,它迭代 eventName
事件。如果 EventEmitter
发出 'error'
,它将抛出异常。它在退出循环时会删除所有监听器。每次迭代返回的 value
是一个数组,由发出的事件参数组成。
可以使用 AbortSignal
取消等待事件
const { on, EventEmitter } = require('events');
const ac = new AbortController();
(async () => {
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo', { signal: ac.signal })) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
})();
process.nextTick(() => ac.abort());
正在监听的事件的名称
可选
options: StaticEventEmitterOptions迭代 emitter
发出的 eventName
事件
静态
once创建一个 Promise
,当 EventEmitter
发出给定事件时完成,或者如果 EventEmitter
在等待时发出 'error'
,则被拒绝。该 Promise
将以一个数组的形式解析,其中包含发出到给定事件的所有参数。
此方法在设计上是通用的,并且适用于 Web 平台 EventTarget 接口,该接口没有特殊的 'error'
事件语义,并且不监听 'error'
事件。
const { once, EventEmitter } = require('events');
async function run() {
const ee = new EventEmitter();
process.nextTick(() => {
ee.emit('myevent', 42);
});
const [value] = await once(ee, 'myevent');
console.log(value);
const err = new Error('kaboom');
process.nextTick(() => {
ee.emit('error', err);
});
try {
await once(ee, 'myevent');
} catch (err) {
console.log('error happened', err);
}
}
run();
对 'error'
事件的特殊处理仅在使用 events.once()
等待另一个事件时使用。如果使用 events.once()
等待 'error'
事件本身,则它将被视为任何其他类型的事件,不会进行特殊处理
const { EventEmitter, once } = require('events');
const ee = new EventEmitter();
once(ee, 'error')
.then(([err]) => console.log('ok', err.message))
.catch((err) => console.log('error', err.message));
ee.emit('error', new Error('boom'));
// Prints: ok boom
可以使用 AbortSignal
取消等待事件
const { EventEmitter, once } = require('events');
const ee = new EventEmitter();
const ac = new AbortController();
async function foo(emitter, event, signal) {
try {
await once(emitter, event, { signal });
console.log('event emitted!');
} catch (error) {
if (error.name === 'AbortError') {
console.error('Waiting for the event was canceled!');
} else {
console.error('There was an error', error.message);
}
}
}
foo(ee, 'foo', ac.signal);
ac.abort(); // Abort waiting for the event
ee.emit('foo'); // Prints: Waiting for the event was canceled!
可选
options: StaticEventEmitterOptions可选
options: StaticEventEmitterOptions
设置或获取所有发射器的默认 captureRejection 值。