Nodejs学习笔记: 源码阅读

jamterni 2019-07-01

注意这里阅读的是版本 8.10.46
编译后的ts代码

EventEmitter

// 大多数 Node.js 核心 API 构建于惯用的异步事件驱动架构,
    // 其中某些类型的对象(又称触发器,Emitter)会触发命名事件来调用函数(又称监听器,Listener)。
    // 例如,net.Server 会在每次有新连接时触发事件,fs.ReadStream 会在打开文件时触发事件,stream会在数据可读时触发事件。
    // http://nodejs.cn/api/events.html#events_passing_arguments_and_this_to_listeners
    export class EventEmitter {//所有能触发事件的对象都是 EventEmitter 类的实例。
        // emitter.on(eventName, listener) 的别名
        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
        // 用于将一个或多个函数绑定到命名事件上。 事件的命名通常是驼峰式的字符串。
        // eventEmitter.on() 用于注册监听器
        on(event: string | symbol, listener: (...args: any[]) => void): this;
        // 使用 eventEmitter.once() 可以注册最多可调用一次的监听器。 当事件被触发时,监听器会被注销,然后再调用。
        once(event: string | symbol, listener: (...args: any[]) => void): this;
        removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
        removeAllListeners(event?: string | symbol): this;
        setMaxListeners(n: number): this;
        getMaxListeners(): number;
        listeners(event: string | symbol): Function[];
        // 当 EventEmitter 对象触发一个事件时,所有绑定在该事件上的函数都会被同步地调用。
        // eventEmitter.emit() 用于触发事件
        // eventEmitter.emit() 方法可以传任意数量的参数到监听器函数。
        // 当监听器函数被调用时, this 关键词会被指向监听器所绑定的 EventEmitter 实例。
        // 按照监听器注册的顺序,同步地调用每个注册到名为 eventName 的事件的监听器,并传入提供的参数。
        // 如果事件有监听器,则返回 true,否则返回 false。
        emit(event: string | symbol, ...args: any[]): boolean;
        // A class method that returns the number of listeners for the given eventName registered on the given emitter.
        listenerCount(type: string | symbol): number;
        // Added in Node 6...
        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
        // 返回已注册监听器的事件名数组。 数组中的值为字符串或 Symbol。
        eventNames(): Array<string | symbol>;
    }

相关推荐

TesterJingel / 0评论 2013-08-27

eastnow / 0评论 2013-01-15