Nodejs 에서 메 일의 동기 화 읽 기 2 실현
첫 번 째 문제 에 대해 imap 연결 을 끝 내 는 방법 을 수정 하여 메 일 읽 기와 해석 이 끝 난 후에 실행 할 수 있 습 니 다. 즉, 리 셋 함수 로 promise 체인 을 넣 는 것 입 니 다.
async function endAsync(message = null) { return new Promise(function (resolve, nay) { imap.on('end', function () { resolve(message); }); imap.end(); });}
…
).then(function (messages) { return endAsync(messages[messages.length - 1]);}).then(function (message) { return message;}) .catch(function (error) { console.error("Oops:", error.message); imap.end(); })
두 번 째 문제 에 대한 잘못된 정 보 는:
(node:3133) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 end listeners added. Use emitter.setMaxListeners() to increase limit
nodejs 의 공식 문서 에서 해당 하 는 설명 을 찾 을 수 있 습 니 다.
By default EventEmitters will print a warning if more than 10 listeners are added for a particular event. This is a useful default that helps finding memory leaks.
기본적으로 같은 이벤트 에 10 개가 넘 는 listener 를 추가 하면 경고 메 시 지 를 출력 합 니 다.이 기본 행 위 는 메모리 누 출 을 발견 하 는 데 도움 이 된다.
이전 글 [2] 에서 말 한 자바 script 에서 자바 script runtime 은 세 번 째 메모리 공간, 이벤트 큐 (Queue) 를 유지 하고 있 기 때문에 이벤트 의 listener 를 메모리 관리의 범주 에 고려 해 야 합 니 다.그러나 허용 되 는 listener 수 를 늘 려 이 문 제 를 회피 하고 싶 지 않다. 더 좋 은 방법 이 있 기 때문이다.
Using the eventEmitter.once() method, it is possible to register a listener that is called at most once for a particular event. Once the event is emitted, the listener is unregistered and then called.
once 로 listener 를 등록 할 때 특정한 이벤트 에 한 번 만 호출 됩 니 다. 이벤트 가 발생 하면 listener 도 트리거 되 지만 나중에 삭 제 됩 니 다.
async function endAsync(message = null) { return new Promise(function (resolve, nay) { imap.once('end', function () { resolve(message); }); imap.end(); });}
이 두 가지 문 제 를 해결 한 후에 이 간단 한 예 를 돌 이 켜 보면 imap 대상 이 전체 변수 이거 나 singleton 모델 의 응용 이 라 고 할 수 있 기 때문에 setMaxListeners 의 문제 가 생 긴 다.
const imap = new Imap({ user: 'user', password: 'password', port: 993, host: 'host', tls: true});
이 두 편의 글 을 통 해 독자 들 은 내 가 Nodejs 에서 메 일의 동기 화 읽 기 를 어떻게 실현 하 는 지 알 수 있 을 것 이다.그리고 이 과정 에서 나타 난 문제 와 해당 하 는 해결 방법 을 묘사 했다.
인 스 턴 스 코드 는 github 에서 [3] 을 찾 을 수 있 습 니 다.
【 1 】 Nodejs 에서 메 일의 동기 화 읽 기 1 【 2 】 Nodejs Event Loop 【 3 】 testimap_sample_end_once.js
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.