在Node中向JavaScript类添加“事件”的最紧凑方式是什么?js模块?(在ES6及更高版本的env.)

csbfibhn  于 2023-04-29  发布在  Node.js
关注(0)|答案(1)|浏览(107)

一直在寻找一种通用的方法来处理类中的事件。准确地说,我在做一个节点。js模块,我希望能够为某些事件添加多个回调。比如说,我的源代码看起来像这样:

class Example {
    constructor(...args) {
        // ...
    }
    doSomething(earg) {
        setTimeout(() => {
            // I want an event call here.
            // this.callEvent(eargs) or something like that, to pass 
            // down arguments to callbacks.
        }, 3000);
    }
    on(event, callback, watch) {
        // ...
    }

    once(event, callback, watch) {
        // ...
    }
}

const example = new Example();
example.on('doSomethingEnd', (earg) => console.log(':P', earg));

在ES6及以上环境中实现.on.once的最紧凑和最现代的方法是什么?如何实现“代码编辑器自动填充”?(对于像Atom或VSCode这样的编辑器,或任何其他具有语法提示的编辑器)。

rekjcdws

rekjcdws1#

要以现代紧凑的方式处理类中的事件,可以使用Node中events模块中的EventEmitter类。js。下面是一个如何修改Example类以使用EventEmitter的示例:

const EventEmitter = require('events');

class Example extends EventEmitter {
    constructor(...args) {
        super();
        // ...
    }
    doSomething(earg) {
        setTimeout(() => {
            // Emit the 'doSomethingEnd' event with the 'earg' argument
            this.emit('doSomethingEnd', earg);
        }, 3000);
    }
}

const example = new Example();
example.on('doSomethingEnd', (earg) => console.log(':P', earg));

在本例中,Example类扩展了EventEmitter类,后者提供了处理事件的on()和once()方法。doSomething()方法使用emit()方法发出带有earg参数的“doSomethingEnd”事件。
要在带有语法提示的编辑器中使用此代码,可以使用npm安装@types/node包。此包为Node提供TypeScript定义。js模块,包括events模块。一旦您安装了包,您的编辑器应该能够为EventEmitter类及其方法提供语法提示。

相关问题