账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    在electron中一个事件可以被添加监听多次么?
    66
    0

    看了下electron的代码

    class IncomingMessage extends EventEmitter {
    
        // Docs: http://electron.atom.io/docs/api/incoming-message
    
        /**
         * Emitted when a request has been canceled during an ongoing HTTP transaction.
         */
        on(event: 'aborted', listener: Function): this;
        once(event: 'aborted', listener: Function): this;
        addListener(event: 'aborted', listener: Function): this;
        removeListener(event: 'aborted', listener: Function): this;
        /**
         * The data event is the usual method of transferring response data into
         * applicative code.
         */
        on(event: 'data', listener: (
                                     /**
                                      * A chunk of response body's data.
                                      */
                                     chunk: Buffer) => void): this;
        once(event: 'data', listener: (
                                     /**
                                      * A chunk of response body's data.
                                      */
                                     chunk: Buffer) => void): this;
        addListener(event: 'data', listener: (
                                     /**
                                      * A chunk of response body's data.
                                      */
                                     chunk: Buffer) => void): this;
        removeListener(event: 'data', listener: (
                                     /**
                                      * A chunk of response body's data.
                                      */
                                     chunk: Buffer) => void): this;
        /**
         * Indicates that response body has ended.
         */
        on(event: 'end', listener: Function): this;
        once(event: 'end', listener: Function): this;
        addListener(event: 'end', listener: Function): this;
        removeListener(event: 'end', listener: Function): this;
        /**
         * error Error - Typically holds an error string identifying failure root cause.
         * Emitted when an error was encountered while streaming response data events. For
         * instance, if the server closes the underlying while the response is still
         * streaming, an error event will be emitted on the response object and a close
         * event will subsequently follow on the request object.
         */
        on(event: 'error', listener: Function): this;
        once(event: 'error', listener: Function): this;
        addListener(event: 'error', listener: Function): this;
        removeListener(event: 'error', listener: Function): this;
        headers: any;
        httpVersion: string;
        httpVersionMajor: number;
        httpVersionMinor: number;
        statusCode: number;
        statusMessage: string;
      }

    对于进入消息提供的API

    目前程序是一个与telet交互的程序,输出的内容渲染到了web页,所以on('data')已经用了,而且不能被移除。

    移除了页面就不输出连续的内容了,必须保持监听。

    现在因为要做触发器,所以需要在另外一个类里监听'data'事件

    eventNames() 打印可以看到[ 'end', 'finish', '_socketEnd', 'data' ]

    所以我的问题是,如何再增加一个对'data'的监听事件?

    用过addListener,但是打印事件名还是[ 'end', 'finish', '_socketEnd', 'data' ]所以也没办法用removeListener移除。

    求解

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 我瞎跟我走 普通会员 1楼

      在Electron中,事件可以被添加和取消监听多次,但是不能被添加监听多次后删除之前添加的事件。这是因为Electron事件监听器是一种全局注册机制,也就是说,当一个事件被添加到DOM元素上时,它会被所有已注册的事件监听器监听到。这导致如果在同一时刻添加了多个事件监听器,这些事件监听器会被共享同一份事件监听器列表,从而导致事件处理函数被重复调用。

      如果你想添加多个事件监听器,但不想影响到之前添加的事件处理函数,你可以使用events模块中的ononce方法。on方法用于添加一个事件监听器,once方法用于添加一个事件监听器,但只在第一次被添加时被调用。

      以下是一个简单的例子:

      ```javascript const events = require('events');

      // 创建一个事件监听器实例 const eventListener = new events.EventEmitter();

      // 添加一个事件监听器 eventListener.on('event', () => { console.log('事件触发'); });

      // 添加一个事件监听器,只在第一次被添加时被调用 eventListener.once('event', () => { console.log('事件触发,但已存在'); });

      // 阻止添加事件监听器 eventListener.removeAllListeners('event');

      // 使用同一个事件监听器 eventListener.on('event', () => { console.log('事件触发'); }); ```

      在这个例子中,我们首先创建了一个事件监听器实例,然后添加了两个事件监听器:一个用于添加事件,另一个用于添加事件,并且只在第一次被添加时被调用。然后,我们使用removeAllListeners方法将事件监听器从DOM元素上移除,这确保了每个事件监听器只会被添加一次。

      注意,eventListener.removeAllListeners('event')方法不会移除已经添加的事件监听器,它只会移除那些已经不再被添加的事件监听器。如果你需要移除所有已经添加的事件监听器,你需要使用events.removeAllListeners方法,而不是单独添加每个事件监听器。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部