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

What's the most compact way to add "events" to a JavaScript class in a Node.js module? (in ES6 and above env.)

提问人:bouncytorch 提问时间:4/29/2023 最后编辑:bouncytorch 更新时间:5/17/2023 访问量:65

问:

一直在寻找处理类中事件的通用方法。确切地说,我正在制作一个 node.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 及更高版本的环境中实现 s 和 s 的最紧凑和最现代的方法是什么,以及如何为此进行“代码编辑器自动填充”?(适用于 Atom 或 VSCode 等编辑器,或任何其他具有语法提示的编辑器)。.on.once

JavaScript 节点.js 事件 ECMAScript-6

评论

0赞 Aleksandar 4/29/2023
只是为了澄清一下,您对代码有任何问题还是只是想获得审查?我个人不确定“最紧凑和最通用的方式术语代表什么,也许更有经验的用户会知道这个话题。也许是这个
0赞 bouncytorch 4/29/2023
@Aleksandar 要求一个确切的解决方案。另外澄清一下,我处于一个没有文档或 html 元素的环境中,我正在制作一个节点模块。我会稍微修改一下问题,让它更清楚一些。node.js
0赞 Bergi 4/29/2023
@bouncytorch那为什么不直接使用 nodejs.org/api/events.html 呢?
0赞 bouncytorch 4/29/2023
@Bergi好吧,我不知道,谢谢!这就是我问这个问题的原因,而且据我所知,Stack 上没有类似的问题。如果有的话,有人可以将其标记为重复,因为我不能。

答:

0赞 bouncytorch 5/17/2023 #1

解决了它,Node 有一个内置的类(道具@Bergi):

const { EventEmitter } = require('events');

class Example extends EventEmitter {
    constructor(...args) {
        // ...
    }
    doSomething(earg) {
        setTimeout(() => {
            this.emit('<example>', 'arg0')
        }, 3000);
    }
}

const example = new Example();
example.on('<example>', (earg) => { /* ... */ });

评论

1赞 robertklep 5/17/2023
之前的答案被删除了,因为它是 ChatGPT 生成的,这是不允许的。