일반 함수를 사용하여 이벤트에 바인딩 할 때 문제없이 제거 할 수 있습니다. 그러나 컨텍스트 함수의 동적 목록을 사용하는 경우 해당 함수에 대한 리스너를 제거 할 수 없습니다. removeListener
에 대한 호출 정말 리스너를 제거하지 않기 때문에동적 이벤트 수신기를 제거 할 수 없습니다.
Warning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
:
'use strict';
var util = require('util');
var EventEmitter = require('events').EventEmitter;
function CustomEventEmitter() {
EventEmitter.call(this);
}
util.inherits(CustomEventEmitter, EventEmitter);
var obj = new CustomEventEmitter();
var onError, exists = false;
for (var i = 0; i < 20; i++) {
onError = function (err) {
console.log(err, i);
};
if (exists) {
obj.removeListener('error', onError);
exists = false;
}
obj.on('error', onError);
exists = true;
}
그것은 발생합니다 :
다음은 전체 테스트 응용 프로그램의 단순화 된 버전입니다.
어떻게 동적 청취자를 제거해야합니까?
답장을 보내 주셔서 감사합니다. 나는 나의 예를 지나치게 간소화 시켰을지도 모른다. 나는 현실에서 내가하는 일을보다 정확하게 반영하기 위해이 예를 갱신했다. 역동적 인 청취자 목록을 위해이를 어떻게 해결할 수 있습니까? –
신경 쓰지 마라, 나는 다른 질문을하기 때문에 그것을 되돌 렸습니다. –