zoukankan      html  css  js  c++  java
  • Nodejs学习笔记(二)--- 事件模块events

    • 简介

          http://nodejs.org/api/events.html

          http://www.infoq.com/cn/articles/tyq-nodejs-event

    eventsnode.js 最重要的模块,events模块只提供了一个对象events.EventEmitter,EventEmitter 的核心是事件发射与事件监听器。

    Node.js中大部分的模块,都继承自Event模块。

    与DOM树上事件不同,不存在事件冒泡、逐层捕获等行为。

    EventEmitter 支持若干个事件监听器。当事件发射时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。  

    /*
        调用events模块,获取events.EventEmitter对象
    */
    var EventEmitter = require('events').EventEmitter;   
    var ee = new EventEmitter();
    
    /*
        EventEmitter.on(event, listener) 为事件注册一个监听
        参数1:event  字符串,事件名
        参数2:回调函数
    */
    ee.on('some_events', function(foo, bar) {
        console.log("第1个监听事件,参数foo=" + foo + ",bar="+bar );
    });
    
    console.log('第一轮');
    ee.emit('some_events', 'Wilson', 'Zhong');
    
    console.log('第二轮');
    ee.emit('some_events', 'Wilson', 'Z');
    
    EventEmitter.on(event, listener) 示例源码

    /*
        EventEmitter.emit(event, [arg1], [arg2], [...])   触发指定事件
        参数1:event  字符串,事件名
        参数2:可选参数,按顺序传入回调函数的参数
        返回值:该事件是否有监听
    */

    ee.on('some_events', function(foo, bar) {         
        console.log("第1个监听事件,参数foo=" + foo + ",bar="+bar );
    });
    var isSuccess = ee.emit('some_events', 'Wilson', 'Zhong');

    /*
        EventEmitter.once(event, listener)  为事件注册一次性监听,触发一次后移除监听
        参数1:event  字符串,事件名
        参数2:回调函数
    */

    ee.once('some_events', function(foo, bar) {
        console.log("第1个监听事件,参数foo=" + foo + ",bar="+bar );
    });
    
    
    console.log('第一轮');
    ee.emit('some_events', 'Wilson', 'Zhong');
    
    console.log('第二轮');
    var isSuccess =  ee.emit('some_events', 'Wilson', 'Zhong');
    console.log(isSuccess);

    /*
        EventEmitter.removeListener(event, listener)  移除指定事件的监听器
        注意:该监听器必须是注册过的
        PS:上一个例子之后以会失败,很大原因就是忽略了监听器,理所当然的认为传个事件名就OK了,所以就悲剧了!
    */
    var listener = function(foo,bar)
    {
        console.log("第1个监听事件,参数foo=" + foo + ",bar="+bar );
    }
    ee.on('some_events', listener);
    ee.removeListener('some_events', listener);

    /*
        EventEmitter.removeAllListeners([event])   移除(批定事件)所有监听器
        参数1:可选参数,event  字符串,事件名
    */
    ee.removeAllListeners('some_events');

    /*
    EventEmitter.removeAllListeners([event])不用事件名直接执行,移除所有监听函数
    */
    ee.removeAllListeners();
    • 其他

         用的比较少的就不详细说了

         EventEmitter.defaultMaxListeners

    EventEmitter.defaultMaxListeners功能与setMaxListeners类似,
    给所有EventEmitter设置最大监听
    setMaxListeners优先级大于defaultMaxListeners

         EventEmitter.listenerCount(emitter, event)

    返回指定事件的监听数

         特殊的事件Error

    引用自Node.js开发指南:EventEmitter 定义了一个特殊的事件 error,它包含了“错误”的语义,我们在遇到 异常的时候通常会发射 error 事件。当 error 被发射时,EventEmitter 规定如果没有响 应的监听器,Node.js 会把它当作异常,退出程序并打印调用栈。我们一般要为会发射 error 事件的对象设置监听器,避免遇到错误后整个程序崩溃。

  • 相关阅读:
    Hamler 0.2 正式发布
    Xamarin.Forms 解决ListView高度问题
    Xamarin.Forms中DependencyService的使用
    Xamarin.Forms Android 底部导航栏
    修改UITabBar样式 TintColor 和 Selected Tab Images in Xamarin.Forms iOS
    Xamarin.iOS中使用MvvmLight框架
    Xamarin.iOS 代码中添加约束练习
    Xamarin.Android 手势密码
    UWP 手势密码实现
    Xamarin.iOS 手势密码
  • 原文地址:https://www.cnblogs.com/fanzg/p/5441494.html
Copyright © 2011-2022 走看看