수색…


비고

이벤트가 "발생합니다"( "이벤트 게시"또는 "이벤트 표시"와 같은 의미)되면 각 수신기는 동 기적으로 ( 소스 ) 호출되며 emit() 에 전달 된 데이터와 함께 호출됩니다 얼마나 많은 인자를 전달해야할지

myDog.on('bark', (howLoud, howLong, howIntense) => {
  // handle the event
})
myDog.emit('bark', 'loudly', '5 seconds long', 'fiercely')

리스너는 등록 된 순서대로 호출됩니다.

myDog.on('urinate', () => console.log('My first thought was "Oh-no"'))
myDog.on('urinate', () => console.log('My second thought was "Not my lawn :)"'))
myDog.emit('urinate')
// The console.logs will happen in the right order because they were registered in that order.

그러나 먼저 추가 된 리스너가 있기 전에 먼저 리스너가 필요하면 prependListener() 과 같이 사용할 수 있습니다.

myDog.prependListener('urinate', () => console.log('This happens before my first and second thoughts, even though it was registered after them'))

당신이 이벤트를 수신해야하지만 한 번만 듣고 싶은 경우에, 당신은 사용할 수 있습니다 once 의 대신 on , 또는 prependOnceListener 대신 prependListener . 이벤트가 시작되고 리스너가 호출되면 리스너는 자동으로 제거되며 다음에 이벤트가 발생하면 다시 호출되지 않습니다.

마지막으로, 모든 청취자를 제거하고 다시 시작하려는 경우 자유롭게 다음을 수행하십시오.

myDog.removeAllListeners()

이벤트 이미 터를 통한 HTTP 분석

HTTP 서버 코드 (예 : server.js ) :

const EventEmitter = require('events')
const serverEvents = new EventEmitter()

// Set up an HTTP server
const http = require('http')
const httpServer = http.createServer((request, response) => {
  // Handler the request...
  // Then emit an event about what happened
  serverEvents.emit('request', request.method, request.url)
});

// Expose the event emitter
module.exports = serverEvents

수퍼바이저 코드 (예 : supervisor.js ) :

const server = require('./server.js')
// Since the server exported an event emitter, we can listen to it for changes:
server.on('request', (method, url) => {
  console.log(`Got a request: ${method} ${url}`)
})

서버가 요청을받을 때마다 감독자가 듣고있는 request 라는 이벤트를 내 보낸 다음 감독자가 이벤트에 반응 할 수 있습니다.

기초

Event Emitter는 Node에 내장되어 있으며 게시자 가 이벤트를 내 보내어 구독자 가들을 수 있고 반응 할 수있는 패턴 인 pub-sub 용입니다. Node 전문 용어에서는 게시자를 Event Emitters 라고하며 구독자는 청취자 라고하며 이벤트에 반응합니다.

// Require events to start using them
const EventEmitter = require('events').EventEmitter;
// Dogs have events to publish, or emit
class Dog extends EventEmitter {};
class Food {};

let myDog = new Dog();

// When myDog is chewing, run the following function
myDog.on('chew', (item) => {
  if (item instanceof Food) {
    console.log('Good dog');
  } else {
    console.log(`Time to buy another ${item}`);
  }
});

myDog.emit('chew', 'shoe'); // Will result in console.log('Time to buy another shoe')
const bacon = new Food();
myDog.emit('chew', bacon); // Will result in console.log('Good dog')

위의 예에서 dog는 publisher / EventEmitter이고 항목을 확인하는 함수는 subscriber / listener입니다. 더 많은 청취자를 만들 수 있습니다.

myDog.on('bark', () => {
  console.log('WHO\'S AT THE DOOR?');
  // Panic
});

단일 이벤트에 대해 여러 개의 리스너가있을 수도 있으며 리스너를 제거 할 수도 있습니다.

myDog.on('chew', takeADeepBreathe);
myDog.on('chew', calmDown);
// Undo the previous line with the next one:
myDog.removeListener('chew', calmDown);

한 번만 이벤트를 듣고 싶다면 다음을 사용할 수 있습니다.

myDog.once('chew', pet);

경쟁 조건없이 청취자를 자동으로 제거합니다.

구독 한 이벤트의 이름을 가져옵니다.

EventEmitter.eventNames () 함수는 현재 구독중인 이벤트의 이름을 포함하는 배열을 반환합니다.

const EventEmitter = require("events");
class MyEmitter extends EventEmitter{}

var emitter = new MyEmitter();

emitter
.on("message", function(){ //listen for message event
    console.log("a message was emitted!");
})
.on("message", function(){ //listen for message event
    console.log("this is not the right message");
})
.on("data", function(){ //listen for data event
    console.log("a data just occured!!");
});

console.log(emitter.eventNames()); //=> ["message","data"]
emitter.removeAllListeners("data");//=> removeAllListeners to data event
console.log(emitter.eventNames()); //=> ["message"]

RunKit에서 실행

특정 이벤트를 수신 대기하도록 등록 된 리스너 수를 가져옵니다.

Emitter.listenerCount (eventName) 함수는 인수로 제공된 이벤트를 현재 수신중인 리스너 수를 반환합니다.

const EventEmitter = require("events");
class MyEmitter extends EventEmitter{}
var emitter = new MyEmitter();

emitter
.on("data", ()=>{ // add listener for data event
    console.log("data event emitter");
});

console.log(emitter.listenerCount("data"))    // => 1
console.log(emitter.listenerCount("message")) // => 0

emitter.on("message", function mListener(){ //add listener for message event
    console.log("message event emitted");
});
console.log(emitter.listenerCount("data"))    // => 1
console.log(emitter.listenerCount("message")) // => 1

emitter.once("data", (stuff)=>{ //add another listener for data event
    console.log(`Tell me my ${stuff}`);
})

console.log(emitter.listenerCount("data"))   // => 2
console.log(emitter.listenerCount("message"))// => 1


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow