面试题答案
一键面试once
方法和on
方法的区别:on
方法:用于为指定事件绑定一个监听器函数。每次触发该事件时,绑定的监听器函数都会被执行。例如,假设有一个EventEmitter
实例emitter
,绑定事件监听器如下:
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('eventName', () => {
console.log('This is a regular listener');
});
emitter.emit('eventName');
emitter.emit('eventName');
在上述代码中,每次执行 emitter.emit('eventName')
,监听器函数都会输出 This is a regular listener
。
once
方法:同样用于为指定事件绑定一个监听器函数,但这个监听器函数只会在事件第一次触发时执行,后续再触发该事件,此监听器函数不会再执行。例如:
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.once('eventName', () => {
console.log('This is a once - listener');
});
emitter.emit('eventName');
emitter.emit('eventName');
在这个代码中,第一次执行 emitter.emit('eventName')
时,会输出 This is a once - listener
,但第二次执行 emitter.emit('eventName')
时,不会有任何输出。
2. 在同一个事件上多次使用 once
方法:每次使用 once
方法都会为事件绑定一个新的只执行一次的监听器。当事件触发时,这些通过 once
绑定的监听器会按照绑定的顺序依次执行,且每个监听器仅执行一次。示例代码如下:
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.once('eventName', () => {
console.log('First once - listener');
});
emitter.once('eventName', () => {
console.log('Second once - listener');
});
emitter.emit('eventName');
上述代码执行后,会先输出 First once - listener
,然后输出 Second once - listener
,再次执行 emitter.emit('eventName')
不会有任何输出。