最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • Node核心模块之Events

    Node核心模块之Events

    Node.js V6.9.4
    Node.js核心API的大部份是围绕1个异步事件驱动架构构建的,因此Events模块是很多模块的基础,很多模块都是基于Events模块建立的,

    例如:net.Server对象每当对等体连接到它时发出1个事件; fs.ReadStream在打开文件时发失事件; 每当数据可用于读取时,流发失事件。

    所有发失事件的对象都是EventEmitter类的实例。这些对象公然了1个EventEmitter.on()函数,它允许1个或多个函数附加到对象发出的命名空间。

    我们可以为1个事件对象注册多个事件,可以为1个事件注册多个监听器

    1.Events模块基本用法

    
    const EventEmitter = require('events');
    
    class MyEmitter extends EventEmitter {}
    
    const myEmitter = new MyEmitter();
    
    myEmitter.on('event', () => {       //注册1个名为'event'的事件
      console.log('an event occurred!');
    });
    
    //触发名为'event'的事件
    myEmitter.emit('event');  // => 'an event occurred!'    
    

    2.同步与异步
    * EventEmitter依照事件的注册顺序同步的调用监听器,如果想切换到异步模式,使用setImmediate()或process.nextTick() *

    const myEmitter = new MyEmitter();
    
    myEmitter.on('event', (a, b) => {
    
      setImmediate(() => {
        console.log('this happens asynchronously');     // 该事件会异步触发
      });
    });
    
    myEmitter.emit('event', 'a', 'b');
    

    3.Error events
    * 当事件队列中产生毛病或没有为毛病事件注册监听器,则利用会抛出1个’error’事件,并且程序会退出 *

    const myEmitter = new MyEmitter();
    myEmitter.emit('error', new Error('whoops!'));  // 抛出毛病并且程序退出

    * 避免抛出毛病时,进程崩溃,可以为进程注册1个uncaughtException事件,用来处理毛病,避免程序崩溃 *

    const myEmitter = new MyEmitter();
    
    process.on('uncaughtException', (err) => {
      console.log('whoops! there was an error');
    });
    
    //进程不会崩溃
    myEmitter.emit('error', new Error('whoops!'));  // => 'whoops! there was an error'
    

    * 最好实践:应当始终为监听器注册1个’error’事件 *

    const myEmitter = new MyEmitter();
    
    myEmitter.on('error', (err) => {
      console.log('whoops! there was an error');
    });
    
    myEmitter.emit('error', new Error('whoops!'));   // => 'whoops! there was an error'
    

    4.Event经常使用API介绍
    * const EventEmitter = require(‘events’) *
    * const myEE = new EventEmitter() *

    方法 作用
    myEE.on(‘eventName’, listener) 为当前实例对象的某个事件注册监听器
    myEE.emit(eventName[, …args]) 顺序触发当前实例对象某个事件的所有监听器
    myEE.once(eventName, listener) 设置当前实例对象的某个事件的监听器只触发1次
    myEE.addListener(eventName, listener) 为当前实例对象的某个事件增加监听器
    myEE.eventNames() 返回当前实例对象的所有的注册事件(按注册顺序)
    myEE.getMaxListeners() 返回当前实例对象可以设置的最大监听器数量
    myEE.listenerCount(eventName) 返回当前实例对象的某个事件的监听器数量
    myEE.listeners(eventName) 以数组情势返回当前实例对象的某个事件的所有监听器
    myEE.removeAllListeners([eventName]) 删除当前对象的某个事件的所有监听器
    myEE.removeListener(eventName, listener) 删除当前对象的某个事件的某个监听器
    myEE.setMaxListeners(n) 设置监听器的最大数量

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » Node核心模块之Events

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级