node.js 학습 이벤트 모듈 Events 사용 예시
본 고 는 주로 node.js 사건 모듈 Events 에 사용 되 는 예 시 를 소개 하고 참고 학습 을 제공 합 니 다.다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 해 보 겠 습 니 다.
환경:Node v 8.2.1;Npm v5.3.0; OS Windows10
1.노드 이벤트 소개
Node 대부분의 핵심 API 는 일반적인 비동기 이벤트 구동 구 조 를 사용 합 니 다.그 중에서 일부 유형의 대상(트리거)은 주기 적 으로 명명 사건 을 촉발 하여 함수 대상(모니터)을 호출 합 니 다.
사건 을 촉발 할 수 있 는 모든 대상 은 EventEmitter 류 의 인 스 턴 스 입 니 다.이 대상 들 은 이벤트 Emitter.on()함 수 를 열 었 습 니 다.대상 이 촉발 할 이름 이벤트 에 하나 이상 의 함 수 를 연결 할 수 있 습 니 다.이벤트 이름 은 보통 낙타 봉 식 문자열 이지 만,유효한 자 바스 크 립 트 속성 이름 도 사용 할 수 있 습 니 다.
EventEmitter 대상 이 이 벤트 를 촉발 할 때 이 이벤트 에 연 결 된 모든 함수 가 동기 화 됩 니 다.모니터 의 반환 값 이 버 려 집 니 다.
2.이벤트 모듈 API 소개
3.몇 가지 예
다음은 위의 API 코드 에 대응 하 는 간단 한 예 입 니 다.
3.1 귀속 과 트리거 이벤트
const EventEmitter = require('events');
// EventEmitter
class MyEmitter extends EventEmitter { }
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log(' !');
});
myEmitter.emit('event');
3.2 이벤트 전달 매개 변수
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', (a,b) => {
console.log(a,b);
//1,2
});
myEmitter.emit('event','a','b');
질문일반적인 감청 기 함수 가 EventEmitter 에 호출 될 때 표준 this 키 워드 는 감청 기 에 추 가 된 EventEmitter 를 가리 키 는 설정 을 합 니 다.
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', function() {
console.log(this);
/*
a b MyEmitter {
domain: null,
_events: { event: [Function] },
_eventsCount: 1,
_maxListeners: undefined
}
*/
});
myEmitter.emit('event');
ES6 의 화살표 함 수 를 모니터 로 사용 할 수도 있다.그러나 이 키 워드 는 더 이상 EventEmitter 인 스 턴 스 를 가리 키 지 않 습 니 다.
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log(this);
//{}
});
myEmitter.emit('event');
3.4 비동기 실행EventListener 는 감청 기 등록 순서에 따라 모든 감청 기 를 동기 화 합 니 다.감청 기 함 수 는
setImmediate()
또는process.nextTick()
방법 으로 비동기 작업 모드 로 전환 할 수 있 습 니 다.
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', (a,b) => {
setImmediate(()=>{
//
console.log(a,b);
})
console.log("c");
});
myEmitter.emit('event','a','b');
//c
//a b
3.5 무한 회 시전 과 1 회 시전이 벤트 는 기본적으로 무한 횟수 로 트리거 할 수 있 습 니 다.한 번 만 터치 하면 해당 하 는 감청 함수 가 한 번 실 행 됩 니 다.때때로 우 리 는 감청 함 수 를 한 번 만 실행 하고 싶 습 니 다.[once]를 사용 하여 사건 을 연결 할 수 있 습 니 다.
여러 번 시전:
const EventEmitter = require('events')
class MyEmitter extends EventEmitter { }
const myEmitter = new MyEmitter();
let m = 0;
myEmitter.on('event', () => {
console.log(++m);
});
myEmitter.emit('event'); //1
myEmitter.emit('event'); //2
myEmitter.emit('event'); //3
1 회 시전:
const EventEmitter = require('events')
class MyEmitter extends EventEmitter { }
const myEmitter = new MyEmitter();
let m = 0;
myEmitter.once('event', () => {
console.log(++m);
});
myEmitter.emit('event'); //1
myEmitter.emit('event'); //
myEmitter.emit('event'); //
3.6 오류 사건EventEmitter 인 스 턴 스 에서 오류 가 발생 하면'error'이벤트 가 발생 합 니 다.EventEmitter 가'error'이벤트 에 최소한 하나의 모니터 를 등록 하지 않 으 면'error'이벤트 가 발생 할 때 오류 가 발생 하고 스 택 추적 을 인쇄 하 며 Node.js 프로 세 스 를 종료 합 니 다.
const EventEmitter = require('events');
class MyEmitter extends EventEmitter { }
const myEmitter = new MyEmitter();
myEmitter.emit("error", new Error('whoops!'));
// , Node.js
Node.js 프로 세 스 붕 괴 를 방지 하기 위해 process 대상 의 uncaughtException 이벤트 에 모니터 를 등록 할 수 있 습 니 다.
const EventEmitter = require('events')
class MyEmitter extends EventEmitter { }
const myEmitter = new MyEmitter();
// ,
process.on("uncaughtException",()=>{
console.error(' ');
});
myEmitter.emit("error",new Error("whoops"))
위의 이런 방식 은 최선 의 실천 이 아니 라[error]감청 함 수 를 등록 하 는 것 이 좋 습 니 다.3.7 최대 이벤트 감청 수량 가 져 오기 및 수정
Node 기본 이벤트 의 감청 수량 은 10 개 이 며 10 개가 넘 으 면 경 고 를 보 냅 니 다.
const EventEmitter = require('events')
class MyEmitter extends EventEmitter { }
const myEmitter = new MyEmitter();
console.log(EventEmitter.defaultMaxListeners); //10
for (let i = 0; i < 11; i++) {
myEmitter.on("event", () => {
console.log(i);
});
}
myEmitter.emit("event")
//MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 event listeners added. Use emitter.setMaxListeners() to increase limit
지정 한 EventEmitter 인 스 턴 스 의 모니터 제한 변경
const EventEmitter = require('events')
class MyEmitter extends EventEmitter { }
const myEmitter = new MyEmitter();
myEmitter.setMaxListeners(13);
for (let i = 0; i < 11; i++) {
myEmitter.on("event", () => {
console.log(i);
});
}
myEmitter.emit("event")
3.8 newListener 이벤트EventEmitter 인 스 턴 스 는 내부 모니터 배열 에 모니터 가 추 가 됩 니 다.[이전]자신의'new Listener'이 벤트 를 촉발 합 니 다.
const EventEmitter = require('events')
class MyEmitter extends EventEmitter { }
const myEmitter = new MyEmitter()
myEmitter.once("newListener", (event, listener) => {
if(event === "event"){
myEmitter.on("event",()=>{
console.log("B");
})
}
});
myEmitter.on("event",()=>{
console.log("A");
});
myEmitter.emit("event")
/*
B
A
*/
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Express + AWS S3 이미지 업로드하기웹 사이트 및 모바일 애플리케이션 등에서 원하는 양의 데이터를 저장하고 보호할 수 있다. 데이터에 대한 액세스를 최적화, 구조화 및 구성할 수 있는 관리 기능을 제공한다. AWS S3 에 저장된 객체에 대한 컨테이너...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.