P05:node內置模塊 之 events

相關文章

events 事件觸發器

  • events 屬於內置模塊vue

  • 全部能觸發事件的對象都是 EventEmitter 類的實例。node

  • 事件的命名一般是駝峯式的字符串,但也能夠使用任何有效的 JavaScript 屬性鍵。bootstrap

  • EventEmitter 對象觸發一個事件時,全部綁定在該事件上的函數都會被同步地調用。 被調用的監聽器返回的任何值都將會被忽略並丟棄。api

  • 簡單使用bash

    //  eventEmitter.on() 用於註冊監聽器, eventEmitter.emit() 用於觸發事件
    const EventEmitter = require('events')
    
    // EventEmitter繼承 類 events
    class myEvent extends EventEmitter{}
    
    // 實例化 myEvent
    const myEventClick = new myEvent()
    
    // 監聽myClick
    myEventClick.on('myClick',()=> {
        console.log('Click')
    })
    
    setInterval(() => {
        // 觸發myClick
        myEventClick.emit('myClick')
    }, 1000)
    <!--
        打印 
        myClick
        myClick
        myClick
        ...
    -->
    複製代碼
  • 傳遞參數 params服務器

    • 須要注意emit首參爲觸發的函數名稱,後續參數均爲自定義參數
    • 另外需注意傳參順序,實參與形參再也不敖述
    // 引入內置模塊 events
    const EventEmitter = require('events')
    
    // EventEmitter 繼承 events
    class myEvent extends EventEmitter{}
    
    // 實例化 myEvent
    const ce = new myEvent()
    
    // 監聽錯誤 傳入參數
    ce.on('error', (err, time) => {
        console.log(err)
        console.log(time)
    })
    // 觸發錯誤
    ce.emit('error', new Error('error111'), Date.now())
    // emit首參爲觸發的函數名稱,後續參數均爲自定義參數,
    /**
     * Error: error111
        at Object.<anonymous> (E:\***\***\$$$\api\04_events_param.js:15:18)
        ...
        at bootstrapNodeJSCore (internal/bootstrap/node.js:739:3)
        1574242863420
     * 
     */
    複製代碼
  • 只觸發一次 once 平時實際項目中會遇到事件只觸發一次的狀況,使用once 便可作到。可類比與vue以及jq的once,概念大同小異函數

    const EventEmitter = require('events')
    
    // 繼承EventEmitter 類
    class myEvent extends EventEmitter{}
    
    const myEventClick = new myEvent()
    
    // 監聽myClick
    myEventClick.once('myClick',()=> {
        console.log('Click')
    })
    
    setInterval(() => {
        // 觸發myClick
        myEventClick.emit('myClick')
    }, 1000)
    <!--
    只打印一次
    myClick
    -->
    複製代碼
  • 移除事件監聽函數 removeListener removeAllListenerspost

    • removeListener 移除特定函數 須要傳遞監聽事件以及對應的函數
    • removeAllListeners 移除全部函數 只須要傳入對應的監聽事件便可
    const EventEmitter = require('events')
    class myEvent extends EventEmitter{}
    const ce = new myEvent()
    
    // 事件1
    function fn1() {
        console.log('fn1')
    }
    // 事件2
    function fn2() {
        console.log('fn2')
    }
    // 需注意監聽同一個事件,可同時觸發多個函數
    ce.on('click', fn1)
    ce.on('click', fn2)
    
    setInterval(() => {
        // 觸發myClick
        ce.emit('click')
    }, 500)
    
    setInterval(() => {
        // 觸發myClick
        ce.removeListener('click', fn2)
        // 所有移除 只須要傳入監聽的事件名
    // ce.removeAllListeners('click')
    }, 1500)
    // 打印 能夠再必定時段後再也不打印fn2,說明已經被移除監聽
    /**
     * fn1
     * fn2
     * fn1
     * fn2
     * fn1
     * fn1
     * fn1
     * fn1
     */
    複製代碼

    close學習

相關文章
相關標籤/搜索