Protected
_isProtected
clientOptional
dataProtected
transportStatic
Readonly
captureStatic
captureStatic
defaultStatic
Readonly
error此符号用于安装仅用于监视 'error'
事件的侦听器。使用此符号安装的侦听器将在调用常规 'error'
侦听器之前被调用。
使用此符号安装侦听器不会更改在发出 'error'
事件后的行为,因此如果未安装常规 'error'
侦听器,进程仍将崩溃。
获取窗口的当前缓冲区
0 索引,在显示单元格中,窗口的屏幕位置(列)。
获取光标位置
设置光标位置
通过行数获取窗口高度
通过行数设置窗口高度
在 Vim 会话中不会改变的窗口 ID
获取窗口号
获取窗口位置
0 索引,在显示单元格中,窗口的屏幕位置(行)。
获取包含该窗口的 Tabpage
窗口是否有效
通过列数获取窗口宽度
通过列数设置窗口宽度
同步调用为名为 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[]将一个一次性listener
函数添加到名为 eventName
的事件的监听器数组的_开头_。下次触发 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[]Static
get返回名为 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]
}
Static
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
要查询的发射器
事件名称
Static
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());
正在监听的事件的名称
Optional
options: StaticEventEmitterOptions它迭代emitter
发出的eventName
事件
Static
once创建一个Promise
,当EventEmitter
发出给定事件时,该Promise
将被履行,或者如果EventEmitter
在等待时发出'error'
,则该Promise
将被拒绝。该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!
Optional
options: StaticEventEmitterOptionsOptional
options: StaticEventEmitterOptions
设置或获取所有发射器的默认 captureRejection 值。