一直在寻找处理类中事件的universal种方法.准确地说,我正在创建一个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和更高版本的环境中实现.on.once的最紧凑和modern的方法是什么,以及如何为这种情况做"代码编辑器自动填充"?(对于像Atom或VSCode这样的编辑器,或者任何其他具有语法提示的编辑器).

推荐答案

要以现代而紧凑的方式处理类中的事件,可以使用Node.js中的Events模块中的EventEmitter类.以下是如何修改示例类以使用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));

在此示例中,示例类扩展了EventEmitter类,后者提供了用于处理事件的on()和once()方法.DoSomething()方法使用emit()方法发出带有earg参数的‘doSomethingEnd’事件.

要在带有语法提示的编辑器中使用此代码,可以使用NPM安装@TYES/NODE包.该包提供了Node.js模块的类型脚本定义,包括Events模块.一旦安装了该包,您的编辑器应该能够为EventEmitter类及其方法提供语法提示.

Javascript相关问答推荐

在JavaScript中,是否有一种方法可以创建自定义thable,在等待某些代码后自动触发它?

使用print This时, map 容器已在LeafletJS中初始化

使用JavaScript重新排序行

Spring boot JSON解析错误:意外字符错误

如何使覆盖div与可水平滚动的父div相关?

Chromium会将URL与JS一起传递到V8吗?

我的服务工作器没有连接到我的Chrome扩展中的内容脚本.我该怎么解决这个问题?

以Angular 实现ng-Circle-Progress时出错:模块没有导出的成员

使用VUE和SCSS的数字滚动动画(&;内容生成)

如何利用CSS中的隐藏元素实现平滑扩展和防止网格行间隙

我想使用GAS和HTML将从Electron 表格中获得的信息插入到文本字段的初始值中

如何使用画布在另一个内部绘制一个较小但相同的形状,同时保持恒定的边界厚度?

FireBase FiRestore安全规则-嵌套对象的MapDiff

在Java脚本中构建接口的对象

如何将字符串拆分成单词并跟踪每个单词的索引(在原始字符串中)?

如何在Highlihte.js代码区旁边添加行号?

为什么这个最小Angular 的Licial.dev设置不起作用?

我们是否可以在reactjs中创建多个同名的路由

REACT-本机错误:错误类型错误:无法读取未定义的容器的属性

将匿名函数附加到链接的onClick属性