zoukankan      html  css  js  c++  java
  • 591 内置模块events

    3.1. 基本使用

    Node中的核心API都是基于异步事件驱动的:

    • 在这个体系中,某些对象(发射器(Emitters))发出某一个事件;
    • 我们可以监听这个事件(监听器 Listeners),并且传入的回调函数,这个回调函数会在监听到事件时调用;

    发出事件和监听事件都是通过EventEmitter类来完成的,它们都属于events对象。

    • emitter.on(eventName, listener):监听事件,也可以使用addListener
    • emitter.off(eventName, listener):移除事件监听,也可以使用removeListener
    • emitter.emit(eventName[, ...args]):发出事件,可以携带一些参数;
    const EventEmmiter = require('events');
    
    // 监听事件
    const bus = new EventEmmiter();
    
    function clickHanlde(args) {
      console.log("监听到click事件", args);
    }
    
    bus.on("click", clickHanlde);
    
    setTimeout(() => {
      bus.emit("click", "hahaha");
      bus.off("click", clickHanlde);
      bus.emit("click", "kobe");
    }, 2000);
    

    01_events基础方法.js

    const EventEmitter = require("events");
    
    // 1.创建发射器
    const emitter = new EventEmitter();
    
    // 2.监听某一个事件
    // addListener是on的alias简写
    emitter.on('click', (args) => {
      console.log("监听1到click事件", args);
    })
    
    const listener2 = (args) => {
      console.log("监听2到click事件", args);
    }
    
    emitter.on('click', listener2)
    
    // 3.发出一个事件
    setTimeout(() => {
      emitter.emit("click", "hahaha", "james", "kobe");
      emitter.off("click", listener2);
      emitter.emit("click", "hahaha", "james", "kobe");
    }, 2000);
    

    3.2. 常见的属性

    EventEmitter的实例有一些属性,可以记录一些信息:

    • emitter.eventNames():返回当前 EventEmitter对象注册的事件字符串数组;
    • emitter.getMaxListeners():返回当前 EventEmitter对象的最大监听器数量,可以通过setMaxListeners()来修改,默认是10;
    • emitter.listenerCount(事件名称):返回当前 EventEmitter对象某一个事件名称,监听器的个数;
    • emitter.listeners(事件名称):返回当前 EventEmitter对象某个事件监听器上所有的监听器数组;
    console.log(bus.eventNames());
    console.log(bus.getMaxListeners());
    console.log(bus.listenerCount("click"));
    console.log(bus.listeners("click"));
    

    02_events获取信息.js

    const EventEmitter = require('events');
    
    // 1.创建发射器
    const emitter = new EventEmitter();
    
    // 2.监听某一个事件
    // addListener是on的alias简写
    emitter.on('click', (args) => {
      console.log("监听1到click事件", args);
    })
    
    const listener2 = (args) => {
      console.log("监听2到click事件", args);
    }
    emitter.on('click', listener2)
    
    emitter.on("tap", (args) => {
      console.log(args);
    })
    
    // 3.获取注册的事件
    console.log(emitter.eventNames());
    console.log(emitter.listenerCount("click"));
    console.log(emitter.listeners("click"));
    

    3.3. 方法的补充

    emitter.once(eventName, listener):事件监听一次

    const EventEmitter = require('events');
    
    const emitter = new EventEmitter();
    
    emitter.once('click', (args) => {
      console.log("监听到事件", args);
    })
    
    setTimeout(() => {
      emitter.emit('click', 'hahaha');
      emitter.emit('click', 'hahaha');
    }, 2000);
    

    emitter.prependListener():将监听事件添加到最前面

    emitter.on('click', (args) => {
      console.log("a监听到事件", args);
    })
    
    // b监听事件会被放到前面
    emitter.prependListener("click", (args) => {
      console.log("b监听到事件", args);
    })
    

    emitter.prependOnceListener():将监听事件添加到最前面,但是只监听一次

    emitter.prependOnceListener("click", (args) => {
      console.log("c监听到事件", args);
    })
    

    emitter.removeAllListeners([eventName]):移除所有的监听器

    // 移除emitter上的所有事件监听
    emitter.removeAllListeners();
    // 移除emitter上的click事件监听
    emitter.removeAllListeners("click");
    

    03_events不常用方法.js

    const EventEmitter = require("events");
    
    // 1.创建发射器
    const emitter = new EventEmitter();
    
    // 2.监听某一个事件
    // addListener是on的alias简写
    // 只执行一次
    emitter.once('click', (arg1, arg2, arg3) => {
      console.log("监听1到click事件", arg1, arg2, arg3);
    })
    
    const listener2 = function(arg1, arg2, arg3) {
      // 特点: 绑定this, 也不绑定arguments数组
      console.log(arguments);
      console.log(this);
      console.log("监听2到click事件", arg1, arg2, arg3);
    }
    
    emitter.on('click', listener2)
    
    // 将本次监听放到最前面
    emitter.prependListener('click', (arg1, arg2, arg3) => {
      console.log("监听3到click事件", arg1, arg2, arg3);
    })
    
    emitter.on("scroll", (args) => {
      console.log("监听到scroll方法");
    })
    
    
    // 3.发出一个事件
    setTimeout(() => {
      // emitter.removeAllListeners("click");
      emitter.emit("click", "hahaha", "james", "kobe");
      emitter.emit("click", "hahaha", "james", "kobe");
      emitter.emit("scroll", "hahaha", "james", "kobe");
    }, 2000);
    
    console.log(arguments);
    console.log(this);
    
  • 相关阅读:
    【转】Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file:
    kafka之partition分区及副本replica升级
    Rokid开发者社区skill之【历史上的今天】之简介+玩法+设计+实现+心得
    【转】批量删除redis中的key
    shell实现除法,保留小数点后N位
    [Django学习]中间件
    [Django学习]静态文件处理
    [Django学习]模板
    [Django学习]视图
    [Django学习]模型
  • 原文地址:https://www.cnblogs.com/jianjie/p/14343091.html
Copyright © 2011-2022 走看看